C语言:指针的加减

本文深入探讨了C语言中指针的加法、减法运算及其调整权重原理,并通过实例展示了不同数据类型指针间的运算结果。

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

1.指针+数字

    指针加法需要调整,调整的权重为sizeof(指针去掉一个*)

#include <stdio.h>
int main()
{
	int *p = (int *)2000;
	printf("%d\n", p + 2);//2008
	printf("%d\n", (short *)p + 2);//2004
	printf("%d\n", (float *)p + 2);//2008
	printf("%d\n", (double **)p + 2);//2008
	printf("%d\n", (char *)p + 2);//2002
	printf("%d\n", (unsigned long)p + 2);//数字,不是指针//2002

	return 0;
}

2.指针-数字

    指针减法需要调整,调整的权重为sizeof(指针去掉一个*)

#include <stdio.h>
int main()
{
	int *p = (int *)0x2010;
	printf("%d\n", p - 2);//2008
	printf("%d\n", (short *)p - 2);//200c
	printf("%d\n", (double *)p - 2);//2000
	printf("%d\n", (long long *)p - 2);//2008
	printf("%d\n", (float *)p - 2);//2008
	printf("%d\n", (char *)p - 2);//200e
	printf("%d\n", (unsigned long long)p - 2);//数字,不是指针//200e

	return 0;
}

3.指针+指针,非法

4.指针-指针,合法,表示间隔的单元个数,需要调整,调整的权重为sizeof(指针去掉一个*)

    指针-指针分为两步

①算出间隔字节数

②除以调整的权重

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	int *p = &arr[1];//x+4
	int *q = &arr[9];//x+36
	printf("%d\n", p - q);//-8
	printf("%d\n", q - p);//8
	printf("%d\n", (short *)q - (short *)p);//16
	printf("%d\n", (long *)q - (long *)p);//8
	printf("%d\n", (float *)q - (float *)p);//8
	printf("%d\n", (long long *)q - (long long *)p);//8
	printf("%d\n", (double *)q - (double *)p);//4
	printf("%d\n", (char *)q - (char *)p);//32
	printf("%d\n", (long)q - (long)p);//32

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值