读书人

一道怪怪的C++有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

一道怪怪的C++问题
1.没见过用struct这样用的

2.结果问题?

#include <iostream>

using namespace std;

struct A
{
int a;
void k( ) { a = 100; }
};

struct B : public A
{
virtual void f( ) { k( ); }
};


void main()
{
B b;
A* a = (A*) (void*) &b;
a-> k();
cout < <b.a < < ' ' < <a-> a < <endl;
}

结果为:-858993460 100



[解决办法]
呵呵,没人看出来吗,这个问题的关键在于,在题中的A,B定义下,
A* a = (A*) (void*) &b;

A* a = (A*)&b;
的结果是完全不一样的(两种情况下a指向的地址相差4字节). 你如果用后一种写法结果就正常了.

参见:
http://community.csdn.net/Expert/TopicView3.asp?id=5403017

读书人网 >C++

热点推荐