#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:0x7ffe9f05a928der中的第二个元素是:20(int *)p:0x7ffe9f05a92c
好像我在(Way-1)中注释代码行,而在(Way-2)中取消注释行我得到以下输出:
der中的第一个元素是:10(int *)p:0x7ffc10e6de18der中的第二个元素是:0(int *)p:0x7ffc10e6de28
第二次尝试出了什么问题?为什么这里的指针算术结果不同?
执行此操作时:
void * p = &der;
int i = *(int*)p;
您(间接地)将derived
指针转换为int
指针。这将调用未定义的行为,并且程序可以打印任何内容。再次运行它甚至可以打印不同的结果。