由网友提出这样一个问题
用New操作可以创建多维数组,new 类型名 T[下标表达式1][下表表达式2]...。数组的个数是除最左边一位外各位下表表达式的乘积。
如:float (*p)[25][10];
p=new float[10][25][10];用new操作产生了一个指向25*10的二维数组的指针
为什么数组的个数是除最左边外各位的下标表达式的乘积?
我想从几何的角度来说明一下指针
如果我们把a[]看作一条线,实际上一维数据完全可以抽象成一条线
同样a[][]的二维数组可以抽象成面,三维数组可以抽象成立体结构
那么,我们用点指针*p来指向线a[],我们用行指针(*p)[]来指向面a[][]
我们同样用面指针(*p)[][]来指向三维空间a[][][]
这就是我们几何中的由点到面由面到体在语言中的展现!
指针的偏移就是它对应对象的另一个维数!!
也就是 p+i 就构成了(指向)一个具体的实例 无数个具体实例就构成了它指向的对象
如 p指向a[] 那么 p+1 就是 a[] 上一点(也就是线上一个实例)
如 行指针(*p)[]指向面a[][],那么p+1 就指向第二个a[] (也就是第二条线)
同理 无数个面构成了我们的三维空间。
因为我们生活在三维空间
在实际应用中很少会用到超过三维数组的原因或许就因为它超出了我们对空间的想象!!
指针永远比它指向的对象少一维
这也就是为什么要丢掉最左边的下标原因!!