读书人

怎么动态生成多维数组达到c语言静态

发布时间: 2012-03-11 18:15:38 作者: rapoo

如何动态生成多维数组,达到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++代码精粹》一书。

读书人网 >C语言

热点推荐