C语言,申请动态大小的二维数组的时候碰到点问题~

来源:百度知道 编辑:UC知道 时间:2024/05/21 07:34:12
在申请动态大小的二维数组的时候碰到点问题

int *a[2]
scanf("%d",&n)
a[2]=(int *)calloc(n,sizeof(int));

我是这样操作的~
但是语句执行完了以后,n的值就改变了~~~
这个是怎么回事?
另外存放在这个空间里的内容,
在释放空间之前,值就发生了改变~~~
这个又是为什么呢?

用malloc也有一样的问题
你这样得到的是a[2][n],

可是我希望得到的数组是
a[n][2]这个样子的

这个该怎么操作?

int *a[2];
int n;/*n紧跟a定义*/
scanf("%d",&n);
a[2]=(int *)calloc(n,sizeof(int)); /*a[2] 数组越界啦,越界之后,就覆盖了n的值了*/

a[0]=(int *)calloc(n,sizeof(int));
a[1]=(int *)calloc(n,sizeof(int));

-----------------
我的意思是你定义了int a[2];
你只能访问a[0]和a[1],a[2]就是下标越界了

int (*a)[2];/*数组指针*/
int n;
scanf("%d",&n);
a=(int (*)[2])malloc(2,sizeof(int));

应该这样:

char **a;
int x;
scanf("%d",&x);
a=malloc(sizeof(char *)*x);
a[0]=malloc(sizeof(char)*20);
scanf("%s",a[0]);
puts(a[0]);
a[x-1]=malloc(sizeof(char)*30);
scanf("%s",a[x-1]);
puts(a[x-1]);