对于c语言初学者来说,相信大家在学习数组、指针内容,对二者之间的关系都存在疑惑,数组名相当于指针,任取一个指针,对其赋予数组名,相当于把数组首元素的地址赋予指针,但取数组地址许多人又存在疑问,下面我们来逐步分析:
对于下面数组:
![](https://i-blog.csdnimg.cn/blog_migrate/fcbdfeccfe8a6c8d9cedae3632952fc6.png)
arr和&arr分别是什么?
我们知道arr是数组名,数组名表示数组首元素的地址;
那么&arr是什么?下面我们来看一段代码:
![](https://i-blog.csdnimg.cn/blog_migrate/aac75d9648b67c2a7e93f1f3079d8149.png)
运行结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/5644ccbeaa2a030b1a5bdac3320ee671.png)
得到的结果是二者相同,但结论是否为真?我们再看下面一段代码:
![](https://i-blog.csdnimg.cn/blog_migrate/773001abf31d454b7cfbfe038efcc4d6.png)
运行结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/abded6d0a135ee3c742a65abc4fedb60.png)
为什么+1之后二者结果不同,存在差异?
结论:在之前arr和&arr虽然结果相同,但二者之间的意义却截然不同;
实际上&arr取的是数组的地址,而不是数组首元素的地址;
arr+1指的是加一个元素内存大小(加4),&arr+1指跳过整个数组,即加40,存在本质区别;
相信读者读到这里对数组取地址有了一定了解,所以我们可以知道当arr作为地址赋予指针的时候,是数组首元素的地址被赋予。