不懂为什么*(a+i)[j]转化为*(*(a+i+j))求解!
两个表达式都有一次解引用和一次数组,所以a至少为二级指针。
第一个表达式就是a[i][j],不解释
第二个表达式由于[]优先级高,解释为*((a+i)[j]),编译器解析为*(*(a+i+j)+0),即a[i+j][0]
int main(void)
{
int a[][] = { {1, 2}, {3, 4}, {5, 6} };
// a[2][0]
printf("%d\n", *(a + 1)[1]);
// a[1][1]
printf("%d\n", (*(a + 1))[1]);
}
运行一下,说不定你就懂了二