如何理解“指针+1”

        指针指向的数据类型是什么,“指针+1”就跳过一个相应类型的数据,让指针指向跳过这个数据后的地址。

        定义一个整型指针int* p;,因为整型指针指向整型数据,所以“p+1”则代表跳过一个整型数据“p+1”的值就为跳过这个整型数据后的地址。因为一个整型数据占4个字节,需要4个内存单元储存,所以指针的地址值+4。

        下图为验证的代码与运行结果:

        因为指针常常存储在指针变量中,所以多见上面“p+1”这种“指针变量+1”的操作,但本质还是“指针+1”,只是利用指针变量间接操作指针。

        但是也有对指针直接操作的,那便是数组名,这里涉及一个重要内容。下面我们以数组int arr[5] = {1, 2, 3, 4, 5};进行重点说明。

        在此之前补充一个知识:sizeof(数组名)和&数组名这里的数组名表示整个数组。除此之外,任何地方使用数组名,数组名都作为首元素的指针被使用,表示首元素的地址。

        当我们对arr+1时,因为数组名arr是指向数组首元素‘1’的指针,所以(arr+1)代表着跳过一个整型数据‘1’,指针arr会指向跳过这个数据后的地址,对它解引用有*(arr+1)=2。

        但是(&arr+1)又大不相同,&arr代表着取出整个数组的地址,说明&arr是指向一整个数组的指针,则意味着(&arr+1)会跳过一整个数组,指针&arr会指向跳过这个数组后的地址。

        所以说我们使用指针不能只关注它的地址,更要关注它所指向的数据类型。arr与&arr的地址值相同,但是指向的数据类型完全不同,所以“指针+1”的结果也完全不同。

        下图为验证的代码与运行结果:

        同理可得,“指针+2”就跳过两个相应类型的数据,让指针指向跳过两个数据后的地址;“指针-1”就是回跳一个相应类型的数据,让指针指向回跳一个数据后的地址。

        下图为验证的代码与运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值