指针的加减法运算规则

一、指针与整数相加: 可以使用 + 运算符把指针与整数相加,或整数与指针相加。无论哪种情况,整数都会和指针所指向类型的大小(以字节为单位)相乘,然后把结果与初始地址相加。如果相加的结果超出了初始指针指向的数组范围,计算结果则是未定义的。除非正好超过数组末尾第一个位置,C保证该指针有效。

使用举例:

#include <stdio.h>

int main(void) { 
    int urn[5] = {100,200,300,400,500};
    int *ptr1,*ptr2,*ptr3;
    
    ptr1 = urn;	//将数组首地址赋给指针
    ptr2 = &urn[2];	//将数组中第三个元素的地址赋给指针
    
    //指针加法
    ptr3 = ptr1 + 4;
    printf("ptr1 = %p , ptr3 = %p , *ptr3 = %d", ptr1,ptr3,*ptr3);


	return 0;
}

运行结果:
ptr1 = 0x7ffc62e2bec0
ptr3 = 0x7ffc62e2bed0 ==> ptr3 = ptr1+4 = ptr1地址+4*sizeof(int)
*ptr3 = 500
在这里插入图片描述

二、指针减去一个整数: 可以使用 - 运算符从一个指针中减去一个整数。指针必须是第一个运算对象。整数是第2个运算对象。该整数将乘以指针指向类型的大小(以字节为单位),然后相减的结果超出了初始指针所指向数组的范围,计算结果则是未定义的。除非正好超过数组末尾第一个位置。C保证该指针有效。

使用举例:

#include <stdio.h>

int main(void) { 
    int urn[5] = {100,200,300,400,500};
    int *ptr1,*ptr2,*ptr3;
    
    ptr1 = urn;	//将数组首地址赋给指针
    ptr2 = &urn[4];	//将数组中第五个元素的地址赋给指针
    
    //指针加法
    ptr3 = ptr2 - 3;
    printf("ptr2 = %p , ptr3 = %p , *ptr3 = %d", ptr2,ptr3,*ptr3);


	return 0;
}

运行结果:
ptr2 = 0x7ffdaa100d20
ptr3 = 0x7ffdaa100d14   =>  ptr3 = ptr2 地址 - 3*sizeof(int);

*ptr3 = 200

在这里插入图片描述

三、指针求差: 可以计算两个指针的差值。通常,求差的两个指针分别指向同一个数组的不同元素,通过计算求出两元素之间的距离。差值的单位与数组类型的单位相同。ptr2-ptr1得2,意思是这两个指针所指向的两个元素相隔两个int,而不是2字节,只要两个指针都指向相同的数组(或者其中一个指针指向数组后面的第1个地址),C都能保证相减运算有效。如果指向两个不同数组的指针进行求差运算可能会得出一个值,或者导致运行时错误。

使用举例:

#include <stdio.h>

int main(void) { 
    int urn[5] = {100,200,300,400,500};
    int *ptr1,*ptr2,n;
    
    ptr1 = &urn[2];	
    ptr2 = &urn[4];	
    
    //指针加法
    n = ptr2 - ptr1;
    printf("ptr2 = %p , ptr1 = %p , n = %d", ptr2,ptr1,n);

	return 0;
}

运行结果:
ptr2 = 0x7fff9820f020
ptr1 = 0x7fff9820f018
n = 2

在这里插入图片描述

PS:这里在放一个在线编译工具:菜鸟工具

  • 24
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值