C++指针多维数组问题

访问 B[1][1][2]的元素可以通过下面几种方式
*(B[1][1] + 2) //这种 还可以理解。
*( *( B [1] + 1) +2 ) // 晕了。。
*( * ( * ( B + 1) + 1) + 2) // 也晕了。

需要注意的是C++中实际上是不存在多维数组的,C++的多维数组其实是数组的数组,所以可以把前面部分分开来看,先看二维数组:
B[1][1] = *(B[1]+1)

用C[1]表示B[1][1], 那么C[1][2] = B[1][1][2],则
C[1][2] = *(C[1]+2)
因为C[1]=B[1][1]=*(B[1]+1),代进去就变成
C[1][2] = *(C[1]+2) = *(*(B[1]+1)+2)

其它依次类推,这样明白不?追问

加了*号 数据类型是不是就不一样了啊。

追答

不是,这里的B相对于一个三维指针,例如int ***B;

*( * ( * ( B + 1) + 1) + 2) 也可以用同样方法推导:
首先B[1]=*(B+1),这种可以理解吧,设C=B[1],则
B[1][1]=C[1]=*(C+1)=*(B[1]+1)=*(*(B+1)+1)
然后再看B[1][1][2],设C=B[1][1],则
C[2]=*(C+2),由于C=C=B[1][1]=*(*(B+1)+1),所以
C[2]=*(*(*(B+1)+1+2)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-13
教你个简单的方法。
多维数组的元素可以这么看,"B[a]"和*(B+a)是相等的,不要晕,要善于找规律。
这回反过来再看看你写的代码,看看有不理解的没追问

B[a]
*B[a]+1 这个 跟 *(B[a] +1) 一样么。
*B[a] 是不是已经代表那个元素了。。。再 +1 什么意思。。
还是 指针向下一个元素移位。

追答

*B[a]+1 这个 跟 *(B[a] +1) 一样么。
->这能一样吗。*(B[a] +1)这个指的是B[a][1], *B[a]+1 这个是错误的。没有这么写的!

关于*(B[a] +1),你可以这么理解:
B[a]指向了a行,再加上"*(+c)",表示指向了a行中的c列,即B[a][c].

追问

按照书上的 就是这么写的。。。。。
B[a] 是一个指针把。
*( B[a] + 1) 是一个指针么?

第2个回答  2013-08-13
恭喜恭喜恭喜你追问

    求教

    1

    2

    3

    4

    5

相似回答