您的位置:首页 > 其它

指向数据成员的指针

2008-02-15 10:40 246 查看
指向数据成员的指针

飘飘白云

数据成员的指针有两种含义,一种是没有绑定具体对象的数据成员指针,其地址实际是该数据成员在类布局结构中的位移;另一种是绑定了具体对象的的数据成员指针,其地址是该对象的该数据成员在内存中的地址。下面参照书中的例子用vs2005中在32位的机器上写了个测试程序。

输出结果:
第一行是输出8,可以理解,前面有两个整型数据(4+4 = 8),故位移为8;
第二行理应输出4,但在vs2005中得到的是0,大概是编译器做了些类似于空基类的优化处理。
第三行是输出内存地址以及5。

#include <stdlib.h>

class Base1 {
public:
int value1;
};

class Base2 {
public:
int value2;
};

class Derived :
public Base1,
public Base2 {
public:
int value3;
};

int _tmain(int argc, _TCHAR* argv[])
{
printf("/n Point to class's data member %p./n", &Derived::value3);
printf("/n Point to class's data member %p./n", &Derived::value2);//It should be 4,but it is 0.

int Derived:: *pVal3 = &Derived::value3;

Derived object;
object.*pVal3 = 5;

printf("/n Point to object's data member %p, value is %d./n", &(object.*pVal3), object.*pVal3);

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: