C语言的二维数组空间分配
还是那本数据结构的书。介绍动态二维数组的空间分配。
r行,c列的二维数组a。分配方法一是
int* a = malloc(r * c * sizeof(int));
那本书不推荐这种方法,因为并非每种C的编译器都按照行优先的规则来访问二维数组。
也就是说a[m][n]未必等于a[m * c + n];
书上推荐方法二,做了这么个函数
int **malloc2d(int r, int c)
{
int i;
int **t = malloc(r * sizeof(int *));
for (i = 0; i < r; i++)
t[i] = malloc(c * sizeof(int));
return t;
}
但这样就能保证a[m][n]等于a[m * c + n]了吗,在这个函数中malloc是分次分配每行的空间的,能否保证各行在内存中是紧挨着的呢?