char *a[]={"diamonds","clubs","spades","hearts"};
char **p[]={a+3,a+2,a+1,a};
char ***ptr=p;
cout<<*ptr[2][2];
为什么显示h并请解释ptr实现的2d数组及其元素
答案 0 :(得分:12)
请注意x[y]
比*x
更紧密,因此表达式*ptr[2][2]
被解释为*(ptr[2][2])
。
另请注意x[y] == *(x+y)
。
因此
*(ptr[2][2]) == *(p[2][2]) // ptr = p
== *((a+1)[2]) // p[2] == a+1
== *(*(a+1+2)) // x[y] == *(x+y)
== *(*(a+3)) // 1+2 == 3
== *(a[3]) // *(x+y) == x[y]
== *("hearts") // a[3] == "hearts"
== "hearts"[0] // *x == *(x+0) == x[0]
== 'h'
答案 1 :(得分:5)
请参阅KennyTM对解释的出色答案......但我认为这是宣称使用调试器“可视化”内存的完美案例..并提供这类问题的简单答案。
alt text http://img717.imageshack.us/img717/5536/callstack.png