#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
指针。这会调用未定义的行为,并且程序可以打印任何内容。当你第二次运行它时,它甚至可以打印不同的结果。