指针+1,怎么加?

指针+1实际上增加的是一个单元格而非一个字节。通过程序示例和解释,文章说明了指针自增操作会跳过相应类型大小的字节,确保指向下一个元素的位置。此外,文章还提到了指针算术运算的规则,指针+i相当于增加i乘以指针类型大小的字节数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针+1

指针+1,是加一个单元格还是加一个字节呢,
先看一个程序:

#include <stdio.h>
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int *p = arr;
	p++;//p = p + 1
	*p = 10;
	p++;
	*p = 20;
	printf("%d,%d\n",arr[0],arr[1]);
	return 0;
}

这个程序通过编译结果为 1 10,这个结果说明p++后,arr[1]的值被更换为10.

所以指针+1就是加一个单元格,那为什么会是加一个单元格而不是一个字节呢?看一个图。

这个图是假设p++加一个字节,p++,*p=10 的地址赋值后(红色框),arr[0]=2561(蓝色框),显然这个值不是我们想要的结果。
所以指针+1,并非加一个字节,而是加一个单元格。

下面有几个题
指针的算术运算 +,-
指针+i,表示加i个单元格,其加 i * sizeof(指针本身去掉一个 * )字节

int main()
{
	int *p = (int*)2000;
	printf("%d\n",p-2);//2000-2 * sizeof(int)=1992
	printf("%d\n",(char*)p-2);//2000-2 * sizeof(char)=1998
	printf("%d\n",(short*)p-2);//2000-2 * sizeof(short)=1996
	printf("%d\n",(long long*)p-2);//1984
	printf("%d\n",(float*)p-2);//1992
	printf("%d\n",(double*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值