指针相减

#include<stdio.h>
int main()
{
    int arr[5]={0,1,2,3,4};
    int *pb=&arr+1 ; 
    printf("%d \n",pb-arr);
    return 0;
}

这里写图片描述
指针相减的结果是一种有符号整数类型:ptrdiff_t
指针相减就是两个指针在内存中的距离(以数组长度为单位,而不是以字节为单位),因为指针减法的结果将除以数组元素类型的长度;
若想求指针相减的字节大小,可以强制类型转换:int c=(int )pb - (int )arr 。
这里写图片描述
那么指针相减的合法性在哪呢?
如果两个指针都指向同一个数组中的元素,那么它就是合法的,如果两个指针所指向的不是同一个数组中的元素,那么它们相减的结果是未定义的,就好像你将两个位于不同街道的房子的门牌号相减不可能得到这两所房子间的房子数一样,程序员无从知道两个数组在内存中的相对位置,如果不知道这一点,两个指针之间de距离就毫无意义。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值