C动态2维数组

来源:百度知道 编辑:UC知道 时间:2024/05/13 05:12:30
int **create(int row,int cols)
{
int **x,i;
x=(int **)malloc(rows*sizeof(int *));//1.这里的malloc返回的是行指针的地址(2及指针),而malloc返回的是一个指向字符数据的指针(1及指针),所以要加一个* 。 是不是这样理解的? 2维数组&a[i]是不是可以理解为2及指针??
2.这里的(int *) 为什么能表示行指针的地址??
for(i=0;i<rows;i++)
x[i]=(int *)malloc(cols*sizeof(int));
return(x);
}
x=(int **)malloc(rows*sizeof(int *));//这句还是不明白!既然sizeof(int *)是指针的大小,但指针都还没有指向具体数组啊?
怎么得到大小?(rows*sizeof(int *));//既然是指针大小 乘上rows还是一个空间啊?怎么会变几行呢?还有为什么要(int **)加2个*???

理解错误

int*就是个int型的指针,sizeof(int *)是这个指针的大小
在C里面,指针是默认为INT型的,所以sizeof(int *)==sizeof(char *)==sizeof(long *)==sizeof(short *)==sizeof(int)的.(指针还没有指向一个已经定义好的数组,如果是定义好的数组sizeof(int*)返回的是数组大小)

malloc返回值是个void*的指针,所以一般都是要作强制转换成你要的类型的指针.

int**是指向指针的指针,如int**p,*p的值是个指针,**p才是p指向的指针所指向的值.

上面的X相当于定义了一个指针的数组,而X指向这个数组的首址,形成行.每个数组元素是一个指针,这些指针分别指向一个数组首址.就形成了列

1.(int **)malloc(rows*sizeof(int *));返回的是动态2维数组
的首地址.

2维数组&a[i]是不是可以理解为2及指针??可以这样理解!!

2.X[i]其实是*(x+i),这里的X和上面的X不一样了,这是个一维数组,返回的X是一维数组首地址.

完整的动态2维数组开辟:
int nrows,ncolumns;
int **Array;
int i,j;
printf("please input nrows&ncolumns:\n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int **)malloc(nrows*sizeof(int *));
for(i=0;i<ncolumns;i++)
Array[i]=(int *)malloc(sizeof(*Array));

x=malloc(rows*sizeof(int *));

表示分配一个存储rows个int *的空间,将首地址返回给