char *a[]={"diamonds","clubs","spades","hearts"};
char **p[]={a+3,a+2,a+1,a};
char ***ptr=p;
cout<<*ptr[2][2];
Run Code Online (Sandbox Code Playgroud)
为什么它显示h并请解释ptr实现的2d数组及其元素
ken*_*ytm 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'
Run Code Online (Sandbox Code Playgroud)
请参阅KennyTM对解释的优秀答案......但我认为这将是宣称使用调试器"可视化"内存的完美案例..并为这类问题提供简单的答案.
alt text http://img717.imageshack.us/img717/5536/callstack.png