在如下C++程序中,为什么cout 和printf输出的值不一致?

#include<iostream> #include<cstdio> using namespace std; class Point3d{ public: static Point3d origin; float x; float y; float z; }; int main() { cout<<&Point3d::z<<endl; printf("%d\n",&(Point3d::z)); return 0; }

首先
Point3d::z是一种错误的调用方式
z是一个类中的变量,在没有创建对象的时候,这个类中变量是没有实际的内存空间的,对其取地址也就没有意义
要想采用Point3d::z这种方式,需要把float定义为static,这样在没有构建对象时就有自己的地址了
cout<<&Point3d::z<<endl;
输出指针的地址
printf("%d\n",&(Point3d::z));同样是输出地址的值,不过是10进制的
在不同程序中,地址不同,我测试的结果
0x8049ab4
134519476
可以看到134519476就是10进制的0x8049ab4,二者是相同的
如果要达到相同的输出效果,可以在printf中用%p,这个是C中用来输出指针的格式
cout<<&Point3d::z<<endl;
printf("%p\n",&(Point3d::z));
可以得到相同输出
温馨提示:答案为网友推荐,仅供参考
相似回答