初学者对于指针和二维数组的理解

#include

void main()
{
int a[2][3]={0,1,2,3,4,5};
}
图片说明
为什么会*a==a呢?
不是很明白,刚学到这,希望可以解释清楚,有原理更好。多谢了。

不是变量相等,是变量指向的地址相等,a和*a指向的都是0所在的地址。
数组名指向的都是数组首个变量对应的地址,调用时程序根据定义的维度处理后面的变量。
因此a指向{0,1,2,3,4,5}中0的地址,*a=a[0]指向{0,1,2}中0的地址,所以一样。

只是因为*a和a的第一个元素刚好是同一个而已(首地址相同)

换个简单点的说法,一个二维数组a

【1,2】

【3,4】

a是一个二维数组,它的首地址可以说是第一个元素的地址,二维数组的第一个元素是1,故a指向1的地址

*a为二维数组的第一行,也就是一个一维数组,同样它的首地址可以说是第一个元素的地址,而它的第一个元素刚好也是1罢了,所以*a也是指向1的地址

*a获取到的是数组第一个元素的指针