我想为一个2D数组动态分配内存。
这两者有什么区别吗?
(一)
array = (int**)malloc(size * sizeof(int*));
for (i = 0; i < size; i++) {
array[i] = (int *) malloc(size * sizeof(int));
}
2个)
array = (int**)malloc(size *size* sizeof(int));
如果是的话,什么更好用,为什么?
最佳答案
在第一种情况下
array = (int**)malloc(size * sizeof(int*));
for (i = 0; i < size; i++) {
array[i] = (int *) malloc(size * sizeof(int));
}
您正在分配大小等于
size
的size * sizeof( int )
范围,即您正在分配大小一维数组。因此,您将分配指向这些一维数组的第一个元素的大小指针。在第二种情况下表达式
(int**)malloc(size *size* sizeof(int))
表示分配int类型对象的size*size范围,返回的指针被解释为
int **
。因此,这个表达式没有任何意义独立于赋值左侧的内容。考虑到指针的大小可以大于int的大小。你可以改写
int ( *array )[size] = ( int (*)[size] )malloc(size *size* sizeof(int));
在这种情况下,如果大小是一个常量表达式,那么实际上是在分配一个二维数组。