int **a的动态分配空间

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;

这样就能给二维数组分配地址连续的存储空间了。

猜你喜欢

转载自www.cnblogs.com/huoguonaicha/p/12804417.html