输出类成员指针地址的问题,急!!

isnowang 2007-04-17 06:00:12
#include <iostream>
using namespace std;
class a{
public:
int val;
char val1;
int val2;
};
int main(){
printf("%d\n",&a::val);
cout<<&a::val<<endl;
printf("%d\n",&a::val1);
cout<<&a::val1<<endl;
//cout<<&a::val2<<endl;
int a::*t=&a::val2;
cout<<t<<endl;
return 0;
}
VS2005里 大家解释解释结果
不明白的是cout<<&a::val1<<endl;
输出的是1
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2007-04-17
  • 打赏
  • 举报
回复
当然,在bcb、gcc下,强转int恐怕也无效的。sizeof(&a::val)就知道了。
指向成员的指针没有<<操作,自动发生了向bool的转换
taodm 2007-04-17
  • 打赏
  • 举报
回复
cout<<(int)&a::val;
yutaooo 2007-04-17
  • 打赏
  • 举报
回复
我觉得不应该把它看成地址,它应该就是个偏移.
飞哥 2007-04-17
  • 打赏
  • 举报
回复
好歹也声明一个对象啊
#include <iostream>
using namespace std;
class a
{
public:
int val;
char val1;
int val2;

void test()
{
printf("%d\n",&val);
cout<<(&val)<<endl;
printf("%d\n",&val1);
cout<<&val1<<endl;
//cout<<&a::val2<<endl;
int *t=&val2;
cout<<t<<endl;
}

};
int main()
{
a b;
b.test();
return 0;
}
isnowang 2007-04-17
  • 打赏
  • 举报
回复
《Inside c++ objects model》 中printf("%p\n",&a::val); 可以打印出成员变量在类对象的偏移量的.
那为什么cout<<&a::val;总打印出1呢?
freshui 2007-04-17
  • 打赏
  • 举报
回复
按理a是没有分配内存的
啥都没有

这样应该也是编译器的一种处理方法吧
晨星 2007-04-17
  • 打赏
  • 举报
回复
指向非静态成员的指针并不是一般的指针,一般编译器也不会用实际的内存地址来实现它,因为这种指针在应用到具体对象之前,没有绝对意义上的“位置”。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧