想必我们在学习指针这一章节时总是会对一些名称混淆不清(不知道大家是不是这样,反正我是这样(哭笑),没事哒没事哒,反正都来了,为啥不看一看我接下来写的东西呢(老实)),码字不易,不求三连,但求看完
ok,让我们直接进入正题:
以下为几种常见的指针(以arr为例)
1. arr
2. arr[0]
3. &arr[0]
4. &arr
1. arr:数组名arr表示整个数组的起始地址,即数组第一个元素的地址。在大多数情况下,数组名可以被当作一个指向其第一个元素的指针。例如,arr和&arr是等价的,都表示数组第一个元素的地址
2. arr[0]:这是一个数组元素,表示数组的第一个元素。它可以进行读写操作,但不是一个地址。例如,你可以对arr赋值或读取其值,但不能直接对它进行取地址操作
3. &arr[0]:这是数组第一个元素的地址。在大多数情况下,&arr[0]和arr是等价的,因为数组名本身就代表整个数组的起始地址。这意味着它们都指向数组的第一个元素
4. &arr:这是整个数组的起始地址。虽然它与arr在值上相等,但含义不同。&arr表示整个数组的起始地址,而arr[0]表示整个数组的起始地址的第一个元素。例如,&arr+1会跳过整个数组的长度(例如10个整数),而arr+1只会跳过一个整数的大小(例如4字节)
就像下面这些代码所示:总结一下,我们发现前两个符合地址+4(+1*sizeof(int))字节,后面的却是加了40(+数组长度10*sizeof(int))字节,就是直接跳过了这个数组,也说明了&arr表示的是arr数组的地址.
但其中也存在两个特例:
1. sizeof(数组名):
sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节
2. &数组名:
这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的)
除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址
欧克,到这里就差不多是我对这几个容易混淆的指针的理解
如有不足,欢迎评论
本人情绪稳定,不玻璃心(哭笑)