如何动态生成多维数组,达到c语言静态数组相同的效果?
例如定义
int **p;
int x[5][5];
如何动态声明p,可以使得p指向一个5x5的连续的地址空间?并且可以使用类似于x[0][0]这种方式存取数据。就是可以p[0][1] = 9;谢谢
[解决办法]
指向连续地址空间可以这样做:
#include <stdio.h>
int main()
{
int *p;
int a[5][5];
int flag = 1;
for ( int i = 0; i < 5; i++ )
for( int j = 0; j < 5; j++ )
a[i][j] = flag++;
p = &a[0][0];
for( int i = 0; i < 25; i++ )
{
printf( "%d ", *(p + i));
}
return 0;
}
但是要实现p[0][9]这样好像不现实。因为根据C的标准,实际上C中只有一维数组,不存在多维
数组的,而二维数组实际上也是一个一维数组,只是它数组中每一个项又是一个数组,所以才能
够成二维数组。虽然不能用p[x][y]这种形式,但是可以根据数学运算直接计算出元素的为止,
然后直接用p[x]这样来操作,一样可以达到改写a[x][y]的目的。
详细的分析可以参看《C和C++代码精粹》一书。