为什么C++中两个指针相加没有意义

首先,指针相加在C++中是被禁止的,如果你非得用一个指针指向其余两个指针保存的地址之和,可以先把他们转换成int相加后再转换回来,不过一般来说是不需要这样做的。但是C++中指针相减、指针加减整数是允许的。

两个相同类型的指针不能直接相加的原因是编译器里面不允许出现这种操作。

1、所有的有效指针都是一个正整数(0可以被用来定义无效指针,小于0的只能叫非法指针),这个值代表了内存中的某个地址,内存可以理解为一把尺子,上面的刻度就是内存的地址,最小刻度一毫米可以理解为那就是一个字节)。指针的类型定义只是指明了他指向的那个地址段是保存的什么样的数据而已,假设是一个4字节的数据,那么指针的值只是表示开始位置,后面连续的4个字节或刻度的地方,都用来放这个数据。
2、两个类型相同的指针相加毫无意义。比如p1和p2都是类型为int的指针,虽然他们指向的内存中保存了两个int数N1和N2,但是这两个数在内存中可能挨着,也可以能间隔很远,甚至有可能是一个地方。假设p1值也就是N1位置起始值为1234,P2为2345,这个时候如果直接相加得到的数据3589有可能已经超出了内存最大值或者指向某个无意义的内存地址,所以指针相加没有意义可言。正确的应该是N1和N2相加才是合理的算数运算。
3、指针可以相减,可以和立即数加或减,是有意义的,是允许的。比如我想知道N1和N2之间到底间隔了多少字节的内存,两者相减就相当于尺子上两个刻度相减,也就是长度或者宽度了。另外,和立即数的加减主要用来快速寻址,比如我有一个数组,起始指针为P0,如果数组保存的是一系列INT值,那么 P0+2*sizeof(int)得到的值就是第三个元素的所在位置的地址,也是一个指针,是有意义的(因为不同的语言和系统,int值每次所占的字节数可能不一致,所以使用sizeof函数去求得而不是直接加常规的4)。
4、指针不仅可以指向简单数据,也可以指向复杂的数据块或者组合的类型,总之一个类型的指针的值所表示的意义就是这种类型的数据在内存中说占的位置的起点,这只是一个刻度,具体占多宽要根据具体类型来定。指针的操作最容易犯的错误就是:越界、非法指针、指向的数据不是想要的起始位置而是中间位置、指针的值和其指向的值分不清这些。
 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值