查看以下代码
#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 *)转换会更好。
毕竟,谢谢你们所有人。