① c语言三维数组问题
在c语言,数组存储空间是连续的,所以三维数组其实可以看成特殊的一维数组,p[3][4][5]可以看成p[3*4*5]的一维数组,因此p[1][7][1]
=
p[1*4×5+7*5+1]
=
p[56]
56<3*4*5=60
,所以p[1][7][1]没有超出范围
② c 语言中,二维数组结构体和三维数组有什么不同,他们的输入储存各在哪里
C语言中,二维三维数组结构体基本是一样的,一维数组,如a[3]在内存里这样:
a[0]a[1]a[2]
二维a[2][3]就变成了 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
三维a[2][2][3] a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]....
不论如何都是线性存储的, 因为内存可以抽象成线性的
其实C语言中的三维数组一般都是定义成一个指向二维数组的一维数组, 二维数组也一般定义成指向数组的数组
给你的简单的例子:
(循环中)
// 增加内存区域 ---- 二维数组(只能增加, 没做减少处理)
MayBe =(LONG **) realloc(MayBe, sizeof(LONG *) * (MBCount+1));
MayBe[MBCount] = (LONG *) malloc(sizeof(LONG)*10);
MayBe[MBCount][0] = x[0];
MayBe[MBCount][1] = x[1];
MayBe[MBCount][2] = x[2];
MayBe[MBCount][3] = x[3];
MayBe[MBCount][4] = x[4];
MayBe[MBCount][5] = x[5];
MayBe[MBCount][6] = x[6];
MayBe[MBCount][7] = x[7];
MayBe[MBCount][8] = x[8];
MayBe[MBCount][9] = x[9];
MBCount ++;
删除:
for(i=0; i<MBCount; ++i)
if(MayBe[i]) free(MayBe[i]);
free(MayBe);
直接从我的一个程序中抠出来的:P
这里注意的是,不要把指针跟数组弄混了,虽然内存可以用数组的形式访问,但他们实际上是不一样的,数组比指针多一次寻址操作.