指针算术计算


#include <iostream>
using namespace std;
class temp {
int a = 10;
};
class derived : temp {
int b = 20;
};
int main()
{
derived der;
void * p = &der;
cout<<"First element in der is : "<<*(int*)p<<endl;
cout<<"(int*)p :"<<(int*)p<<endl;
p += sizeof(int); //Way -1
//p = (int*)p + sizeof(int); //Way-2
cout<<"Second element in der is : "<<*(int*)p<<endl;
cout<<"(int*)p :"<<(int*)p<<endl;
return 0;
}

如果我执行上面的代码,我会得到以下输出:

der中的第一个元素是:10
(int*(p:0x7ffe9f05a928
der中的第二个元素是,20

其中,就好像我在(Way-1(中注释代码行,在(Way-2(中取消注释行我得到以下输出:

der中的第一个元素是:10
(int*(p:0x7ffc10e6de18
der中的第二个元素是0

第二次尝试出了什么问题?为什么这里的指针算术结果不同?

执行此操作时:

void * p = &der;
int i = *(int*)p;

您正在(间接(将derived指针强制转换为int指针。这会调用未定义的行为,并且程序可以打印任何内容。当你第二次运行它时,它甚至可以打印不同的结果。

相关内容

  • 没有找到相关文章

最新更新