指针漂移C语言,有关C++指针漂移问题的解决方法

虽然说C++编程语言功能真的是非常的强大,但是总会出现一些大大小小的错误。不知道大家在进行C++编程的时候,是否会产生指针漂移的问题呢?那么大家有没有想过这个问题的产生来源呢?其实总的来说,这主要就是和C++对象模型有一定的关系。今天小编会在这篇教程中详细的为大家分析一下,问题的产生原因以及处理的方法。下面我们就一起来学习一下:有关C++指针漂移问题的解决方法。

dfafb8230f4a75676e8e0e83382a1430.png

一、问题产生

小编在第一次遇见这个问题的时候,一直在疑惑这到底是怎样的原因会产生这样的问题?在那段时间,小编真的百分不得其解啊。最后的最后,小编终于确定了产生的原因就是:由于多继承所引发的C++指针漂移,这是和C++对象模型有一定关系的。大家可以看一下示意的代码,具体的代码如下图:

02237559c0996a064e7e1c40ebf0cd61.png

那么在这个时候,相信大家都会发现一个问题,那就是:pb以及pa这两个值是完全不一样的!在它们两者中,有一个和pab是相等的。然而,另外一个则是产生了偏移。假如说我们将AB的声明中B以及A的顺序调换一下,那么会产生怎样的现象呢?没错,就是会产生偏移的指针也会变化成为另外一个。

二、使用void指针

接下来小编会使用void指针愚弄一下编译器,有人就会问这是为什么呢?就是为了可以确定一下,这就是编译器做了转换的原因。具体的代码,如下图:

6fc5ff20f901e66c80d38b5479dfd546.png

此时,大家又会发现pa的值已经是和pab相等了。但是,却指向了一个错误的地方。从pab到pa的转换,在这个转换过程中,完全就是依赖于路径的选择。这就是总让人不是很放心的原因所在。现在我们还不知道将指针放入容器以后再把它取出来,会不会出现错误的情况。当然啦,小编在上面的程序中就已经使用了强制类型转换。其实一般来说,我们在一个良好的程序中是应该避免这个情况出现的。假如说仅仅只有一个隐式转换的话,那么就可以得到一个正确的结果了。具体的代码如下图:

5c55a9e22df175fe0c75d5cbd0adf736.png

三、程序代码

大家可以看一下,下面的程序。这个程序就是利用了Cygwin/g++b来进行编译通过的。具体的代码,如下图:

d6b0efa96ca1b6d8a8f697bb7e8aea0a.png

看完以上的程序代码,大家知道最终的运行结果是什么了吗?如果还不知道的话,可以看下面的正确答案哟!如下图:

31d9faf37019a684c1fc12ac4b434234.png

小编结语:

今天小编主要为大家简单介绍一下在有关C++指针漂移问题的解决方法。通过这篇教程,相信大家在今后的日子中遇到这样的问题,都知道怎样解决了吧。希望这会对大家有所帮助。本篇编程语言教程来源于:课课家教育。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值