C语言实现一个可变长的二维数组

这个数组的行数和每行元素的个数都可以由输入决定,要求有正确的释放语句。格式如下:
请输入行数:
请输入第1行元素的个数:
请输入第2行元素的个数:
.
.
.

如果输入5行,没行元素个数分别为54321,则显示结果应该是:
11111
1111
111
11
1
大概是下面这样写,哪位高人给改改
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,j,k,n,x,a;
char A[]="a=%d";
char*p=(char*)malloc(sizeof(int)*10);
{
if(NULL==p)
{
printf("NULL");
}
else
{
printf("请输入有多少个元素:");
scanf("%d",&x);
a=x;
for(i=1;i<=x;++i)
{
printf("请输入第%d行元素的个数:\n",i);
scanf("%d",p+i);
}
for(j=1;j<=5;++j)
{
A[j]=*(p+j);
n=A[j];
for(k=1;k<=n;++k)
{
printf("1");
}
printf("\n");
}
}
}
free(p);
p=NULL;
}

我新号,没积分了,你做做好事吧

int main(int argc, char* argv[])
{
int a;
printf("请输入行数:");
scanf("%d",&a);
int **p=new int*[a];
int *n=new int[a];
for (int i=1;i<=a;i++)
{
printf("请输入第%d行元素的个数:",i);
scanf("%d",&n[i-1]);
printf("\n");
int q=n[i-1];
p[i-1]=new int[q];
for (int j=0;j<n[i-1];j++)
{
p[i-1][j]=1;
}
}
for (int x=0;x<a;x++)
{
for (int y=0;y<n[x];y++)
{
printf("%d",p[x][y]);
}
printf("\n");
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-28
如果我实现这个我会用到结构体,具体做法加分。给你实现,如果实现一维的在用了一段时间后变长也可以。
第2个回答  2010-08-28
数组没有变长的说法的,它是申请一块固定的内存。打印结果数组是能做的,而且数组不用释放语句,自动释放!如果你希望变的话只能动态申请内存,链表正解!
第3个回答  2010-08-28
C语言的数组在声明的时候就是定长的~
当然定长也可以达到这种效果~
如果真要动态的话~我觉得要用链表~
第4个回答  2010-08-29

A[j]=*(p+j);
n=A[j];
这两行语句改为 n = *(p+j) 或者n = p[j]

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网