两个指针之间的运算

只有指向同一数组的俩个指针变量之间才可以进行计算。否则是没有意义的。

两指针变量相减

两指针变量相减所得之差是俩个指针所指数组之间相差的元素个数。实际上是俩个指针值(地址)相减之差再除以该数组元素的长度(字节数)
注意:因为俩个指针相加没有任何意义,所以别乱搞。

int* pf1, *pf2;
int arr[10] = {0};
pf1 = arr;
pf2 = arr+1;
auto result = pf2 - pf1;

计算机具体运算是两个地址值相减。应该是重载了运算符“-”,结果是指针值相减除以指针所指对象的大小。因为单纯的地址值相减就会和指针所指的对象有关系,所指对象不同那么它的偏移量就会不同。比如,所指的是字符型相减就是1,如果是双精度型那么就是是8。然而如果重载了之后指针相减了就仅仅是为了表示指针所指元素的距离。再说一遍这只是在连续的内存块中才有意义(数组)。那么接下来这行代码就有意思了。

auto result = (char*)pf2 - (char*)pf1;
这行代码得出的结果是4,没错你没有看错。最后的结果就是4。因为重载的运算机制如下:

那么偏移量怎么计算呢?就是两个指针的实际的差值。如果你通过强制转换成字符型(char)那么分母的大小就是1而不是4,这样的话就是扩大了四倍。最后就是得出结果就是元素的距离乘以扩大的倍数。最终得出的结果就是4。

两指针变量进行关系运算

指向同一数组的俩个指针变量进行运算可以表示它们所指数组元素之间的关系,比如:

  • pf1 == pf2 表示指向同一元素。
  • pf1 > pf2 表示pf1处在高地址位置。
  • pf1 < pf2 表示pf1 处在低地址位置。
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值