cout指向非静态数据成员的地址不正确,为什么值始终为1?

时间:2014-04-01 17:11:48

标签: c++

查看以下代码

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

class C { public: int a; char b; static int c; };

int C::c = 2;

int main(){
C c;
printf("&C::a = %d, &C::b = %d\n", &C::a, &C::b);
cout << "&C::a = " << &C::a << " &C::b = " << &C::b << endl;

getchar();
return 0;
}

我得到的结果是

&amp; C :: a = 0,&amp; C :: b = 4

&amp; C :: a = 1&amp; C :: b = 1

那么为什么cout的结果不正确?

好的,我对这个问题的描述是暧昧的。我对此感到抱歉。事实上,我想问为什么&amp; C :: a和&amp; C :: b会cout 1?
至于printf的结果,%d或%p无关紧要。他们都得到了正确的结果。它们之间的区别只是%p将以十六进制格式输出结果。 而且我也知道在cout中添加(void *)转换会更好。 毕竟,谢谢你们所有人。

0 个答案:

没有答案