我想使用malloc声明一个二维数组。在网上搜索后,所有的网站都说要先声明一个int **指针,然后使用malloc为每个一维数组分配内存,并再次使用malloc为每个整数分配空间。 我的疑问是,这种方式声明的数组没有将其元素保存在连续的内存地址中。而下面的方法只使用一个malloc语句动态分配二维数组,并且所有地址都是连续的,符合要求。所以,下面的方式难道不是动态分配二维数组的正确方式吗?
#include <stdio.h>
int main(){
int (*p)[2] = malloc(3 * sizeof *p);
int i;
int j;
//All addresses printed here are contiguous
for(i=0; i<3; i++){
for(j=0; j<2; j++){
printf("%d\t", &p[i][j]);
}
printf("\n");
}
}
24
更改为3 * sizeof *p
,就可以开始使用了。 - Christoph%d
打印指针,应该使用%p
,为了完全的可移植性,你还需要将其转换为void*
。 - Christoph&p
?这是为了检查地址而不是值吗? - v_2e