指针数组

tus*_*har 0 c++ pointers

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)


JRL*_*JRL 5

请参阅KennyTM对解释的优秀答案......但我认为这将是宣称使用调试器"可视化"内存的完美案例..并为这类问题提供简单的答案.

alt text http://img717.imageshack.us/img717/5536/callstack.png