首先最基本的是要知道间接寻址运算符 ‘*’ 和 ‘+’ 的优先级
优先级如下图所示:
所以对于表达式: *(*a+1) 执行顺序为: *a 、 *a+1、 *(*a+1);
二维数组定义: int a[2][3]={1,2,3,4,5};
执行结果如下:
1.*a 中,*a表示的是应该是第一行的首地址,即{1,2,3}首地址,a[0]
2.a+1,即第一行偏移1指向a[0][1];
3.(*a+1),即a[0][1],值为2.
对于表达式:**(a+1)
执行结果如下:
1.a+1,此时表示指针从第一行首地址a偏移一行为第二行首地址
2.*(a+1)表示第二行的首地址a[1]
3.**(a+1)取第二行首地址a[1]所指的元素,即为a[1][0] ,值为4.
代码验证
#include <iostream>
using namespace std;
int main() {
int a[2][3]={1,2,3,4,5};
cout << *(*a+1)<<endl<<**(a+1)<<endl;
return 0;
}
结果如下: