C语言这个表达式怎么看啊

若int a [3][3];则表达式&a[2][1]-a是等于7还是8?

首先要理解这个二维数组 元素个数是3*3个 9个 。
第一个方括号内的数我们暂且称之为行;
第二个方括号内的数称之为列。
所以这个二维数组就有3行3列
它们的正常排列顺序是这样的:
第一行 a[0]
第一行第一列元素a[0][0]
第一行第二列元素a[0][1]
第一行第三列元素a[0][2]

第二行a[1]
第二行第一列元素a[1][0]
第二行第二列元素a[1][1]
第二行第三列元素a[1][2]

第三行a[2]
第三行第一列元素a[2][0]
第三行第二列元素a[2][1]
第三行第三列元素a[2][2]

题目&a[2][1]-a
也即是&a[2][1]-&a[0][0]
表示第三行第二列的地址与第一行第一列地址差,也就是偏移量,也就是偏移了几个元素。
数组索引是从0开始的,所以第三行第二列元素是第8个元素,索引值是7;而第一行第一列元素是第一个元素,索引值是0。
此题相当于 (基地址+7) - (基地址+0)=7

明白了吗?

7