比较模糊的说法是:数组名就是指针
但两者还是有区别的
从输出结果看两者根本就是两个事物,只能说数组名神似指针,数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;那么数组名到底是什么:
符号表是编译原理中的一个概念,应用于编译器的词法分析和语义分析两个阶段。词法分析的目标是让编译器能知道这是个数组就好了,那么语义分析阶段就需要确定这个数组的具体空间了。所以我们定义了一个数组,编译器就会在符号表中加入数组的名字a,并且根据其指定的大小,开辟一段内存空间,把这段内存空间的首地址(也就是第一个元素的地址)存入符号表,这也就是为什么我们通过数组名就可以去访问数组的元素了。编译器这么做是为了使我们使用数组更加的方便,易懂。也有人说a是一个内存地址,也没有什么不妥的,因为编译器允许我们直接把a作为数组首地址来用。数组是一种线性的数据结构,数组名指向了那一片内存。
根据C语言的规定,数组名=数组首元素指针,所以直接可以用数组名的解引用buf来访问第一个元素,也可以使用(buf+N)来访问第N个元素。
但是:https://blog.csdn.net/qq_21834027/article/details/84451976
指针的加减运算的粒度是基于指针类型的长度,数组指针的长度为sizeof(数组),而数组元素指针是sizeof(单个元素)(再啰嗦一次!数组名为数组元素指针而不是数组指针)。
指针数组:是一个数组,数组元素为指针
数组指针:是一个指针,指向数组的指针