应该是第三个元素的只,也就是21吧
这里a[0][0]是第一个元素,那么取地址后,就是第一个元素的地址
这个和首地址是没有关系的,所以不能当两层指针来对待
和a a[0]虽然数值相同,指的是同一个地方,但是意义不同
a是首地址,a[0]是第一行的首地址
所以这个表达式就是第一个元素后移3个位置的元素,也就是a[0][3]的地址,最后加上*,就是数值21了
这个和*(*(a+i)+j)还是有区别的
因为这里是取的第一个元素的地址,而不是首地址
1 2*i+j-2 = 3; 这个非常清楚。
2 关键是对&a[0][0]语义的解释。
这个列子中表示5行6列的多维数组。
a[0]表示第一行,a[0][0]表示第一行第一列。
&a[0][0]表示什么呢?表示第一行第一列的元素内存地址。那么对这个指针的任何操作,就是对最后一个纬度的操作。即对列的操作。+3就是当前行的第一个元素后移3位。结果就是21。
总结:
!!!!! 多纬数组指针的操作是按照指针类型最后一个纬度来进行的。
2*i+j-2=3,打印的数指向数组起始指针+3的位置,应该是21