int** a中,a是一个指针,指向一块内存区域,该地址中存储的是int* a类型的数据。
int* a中,a是一个指针,指向一块内存区域,该区域中存储的是int a类型的数据。
在使用时,int** a相当于一个二维数组,假设我们需要一个row行,col列的二维数组。
如何给int **a分配空间呢?
第一种:
int **a = comdMalloc(row*sizeof(int*));
for (int i=0; i<row; ++i)
{
a[i] = malloc(col*sizeof(int));
}
我们打印这个二维数组高维的地址:
for (int i=0; i<row; ++i)
{
printf("addr:%p\n",a[i]);
}
我们可以发现二维数组的a[i]和a[i+1]之间的地址并不是相差了col*sizeof(int).
所以说这样的分配方式并不能给int** a分配连续的存储空间。
如何给int** a分配连续的存储空间呢?
int** a = (int(**))malloc(row*sizeof(int*));
a[0] = (int*) malloc(row*27*sizeof(int));
for(int i=1;i<row;i++)
a[i]=a[i-1]+col;
这样就能给二维数组分配地址连续的存储空间了。
原文:https://www.cnblogs.com/huoguonaicha/p/12804417.html