指针与几何

由网友提出这样一个问题 

用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[] (也就是第二条线)
同理 无数个面构成了我们的三维空间。

因为我们生活在三维空间
在实际应用中很少会用到超过三维数组的原因或许就因为它超出了我们对空间的想象!!
指针永远比它指向的对象少一维
这也就是为什么要丢掉最左边的下标原因!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值