指针数组

时间:2010-04-20 18:13:38

标签: c++ pointers

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数组及其元素

2 个答案:

答案 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