下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:课课家教育     来源: http://www.kokojia.com点击数:1073发布时间: 2016-12-12 13:00:44

标签: C++编译器程序代码

大神带你学编程,欢迎选课

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

有关C++指针漂移问题的解决方法_C++_编译器_程序代码_课课家

  一、问题产生

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

问题产生

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

  二、使用void指针

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

使用void指针

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

仅仅只有一个隐式转换的话

  三、程序代码

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

利用了Cygwin/g++b来进行编译通过的

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

运行结果

  小编结语:

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

赞(28)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程