指向数据成员的指针

本文通过实例详细介绍了指向数据成员的指针的概念及其两种类型:未绑定和已绑定的指针,并展示了如何在C++中使用这些指针来操作类的数据成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指向数据成员的指针
飘飘白云

数据成员的指针有两种含义,一种是没有绑定具体对象的数据成员指针,其地址实际是该数据成员在类布局结构中的位移;另一种是绑定了具体对象的的数据成员指针,其地址是该对象的该数据成员在内存中的地址。下面参照书中的例子用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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值