很多地方我们常常看到把数组描述为指针,但这其实是不正确的说法。
稍微想一下我们就知道这是两个不同的概念。
数组:表示连续的一些特定类型对象组成的数据结构空间。
指针:通俗的表示一个类型对象地址(地址+类型)
所以这两者怎么看也不是同一个东西!
关键在于,我们对于数组的访问等操作往往是采用指针的方式实现,所以看着像指针。
声明且初始化一个数组 int arr[3]={1,2,3}
那么我们如果要访问数组第0个元素是这样写
int b=arr[0]
[]运算符是数组下标运算符,C标准对其定义:有两个操作数,一个是整型,一个是指针
所以arr好像真是指针?
但C标准又规定了:数组对象,作为表达式大多隐适转换成首元素的指针,用于sizeof和&等一些表达式中除外。
所以这边arr[0]其实是数组arr隐适转换成了首元素指针,并不是arr本身是指针
同样的很多时候我们会打印arr,printf("%p",arr) 输出一个地址值
然后我么判断出arr是地址或者指针,但其实这里也是arr表达式转化成了首元素的指针而已。
当然数组名也不是指针了,数组名就是数组的一个标识符而已。
最后总结 C语言中数组和指针本来就是两种不同的概念,不要试着将其等同,如果这样何必弄出不同的概念,让看的人模糊吗?