我们知道,一维数组名中,数组名代表数组中第一个元素的地址。那么二维数组这一设定是否有变?答案是有的。
在这之前,我们先搞明白二维数组数组名+[ ]的意义。

假定一个二维数组arr[3][5]
在上方图1中我们可以看到arr[n]指向第n行的第一个元素,arr[n]实际上是数组对应行第一个元素的地址。
那么看下面图二来对比数组名arr和arr[n]的区别

在上图2中可以看到arr是地址,因为arr可以用%p打印出来
且从打印的前两行看出arr的步长是20,而arr的第一行元素有五个,每个元素都是4个字节,这里可以知道arr的步长是整一行的的元素总大小。
从打印的第1和第3行看出arr+1转到下一行,而arr[1]指向第2行第一个元素与之地址相对应。
结论:二维数组的数组名是指向第一行整一行的地址
那么我们再来观察其解引用的效果,如下图3


图3:数组名解引用后仍是地址,而arr[n]变成了某个元素的数值,我们可以知道,arr指向的是一行的地址,而解引用后就相当于指向该行第一个元素的地址
图4:数组名解引用后与指向某个元素的地址相一致,再根据arr[n]指向该行第一个元素,再次推导
结论:*arr解引用后变成指向第一行第一个元素的地址,*(arr+n)与arr[n]相同
下面我们来验证一下

图5中验证了我们的结论:
1.二维数组的数组名是指向某一行整行的地址;arr+n相当于&arr[n]
2.*arr解引用后变成指向某行某元素的地址;*(arr+n)与arr[n]相同
3.解引用两次二维数组的数组名就可以取出数组具体某个元素。