如果我要开辟一段 N*M 内存大小的空间,
一般的做法是:
1
|
char
* array =
malloc
(
sizeof
(
char
)*N*M)
|
然而这样我就没有办法像二维数组那样取值,即: array[i][j]
1
2
3
|
char **array = ( char **) malloc ( sizeof ( char *) * N); //sizeof(char*), 保存的是地址
for ( int i = 0; i<N; i++)
array[i] = ( char *) malloc ( sizeof ( char ) *M)
|
然而这样做实际上调用了N次内存分配函数,而且造成了内存的碎片化,时间上也加大了开销
1
2
3
4
|
char **array = ( char **) malloc ( sizeof ( char *)*N);
array[0] = ( char *) malloc ( sizeof ( char )*N*M);
for ( size_t i=1; i<N; i++)
array[i] = array[i-1] + M;
|