在看小甲鱼的C语言教学视频中的指针与数组的过程中有一段话我很难理解,“数组名是数组第一个元素的地址”,我纠结的是数组名字为什么会是地址,a[ ]和地址的那一大串我实在是无法将他们划上等号。
于是我列下了以下的代码,申明一个数组,查看a的地址。
得到的结果如下:
对于这两者的差别,我查阅了论坛的资料。有一大佬解释的通俗易懂。下面是原文链接:(3条消息) C语言基础知识:a a[0] &a &a[0]_aoxiang_ywj的博客-CSDN博客
这里我将原文复制下来方便大家阅读。
(1) a,表示数组名
a做左值时表示整个数组的所有空间(10×4=40字节)【又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,N 所以a不能做左值】;
a做右值表示数组首元素的首地址 (首元素首地址就是数组的第0个元素的起始地址,也就是a[0]的起始地址)。
(2) &a,表示数组名a取地址,字面意思是数组的地址(数组的地址就是数组的首地址(也叫数组的起始地址))
&a不能做左值(&a实质是一个常量,不是变量因此不能赋值,所以自然不能做左值。);
&a做右值时表示【整个数组的首地址】
所以可以知道这里打印的第一条是数组首元素的首地址。第二条打印出的是整个数组的首地址。
虽然结果相同,但意义却不同。
再往下看,将内容拓展:
这里加多了查看数组元素的代码来验证上面的说法。所得结果如下:
确实验证了数组的首元素地址&a[0]和&a一致,顺便查看了第二个元素a[1]的地址(虽然有点多此一举哈哈)。
对于"数组名是数组的第一个元素地址”或许改为“数组名的地址是数组的第一个元素地址”要更加方便理解。