class C{
public:
int a;
int b;
C(int fi, int se){
a = fi;
b = se;
}
};
ostream& operator<<(ostream& os,C c){ // 重载<<操作符,只能为非成员函数(通常为友元,因为会对类中的非public成员操作)
os<<c.a<<" "<<c.b;
return os;
}
令 C c(1,2);
cout<<&c<<endl;
cout<<(int*)(&c)<<endl;
cout<<*(&c)<<endl;
cout<<*(int*)(&c)<<endl;
那么会得到结果是:
0029F9B4
0029F9B4
1 2
1
----------》》&c是c类对象的地址,这个地址是指向整个C类对象的,如果对它取值,即*(&c),那么得到的就是c的值,即c对象。
(int*)(&c)是对c对象的地址的强制类型转换,将指向C类对象的地址转换为指向int型数据,虽然地址的值没有改变,但是指向的东西改变了。(在这里可以认为指向的范围变小了,从C类到int型)如果对这个(int*)(&c)取值,即*(int*)(&c),那么得到的就是C中的第一个四个字节的值,在这里是c.a。