类中取地址的相关操作------int*与&

来源:互联网 发布:机房网络管理 编辑:程序博客网 时间:2024/05/18 23:27


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。



0 0
原创粉丝点击