int main()
{
int x;
x = int(&x);
int* q;
q = &x;
int* p;
p = (int*)&x;
int* w;
w = (int*)x;
cout << *p << endl << x << endl << *q << endl << *w << endl << p << endl << q << endl << w << endl << &x;
return 0;
}
输出:
5762632
5762632个
5762632个
5762632个
0057EE48
0057EE48
0057EE48
0057EE48
此步骤x = int(&x)
有效吗?这有什么概念上的错误吗?
如何形象化/解释撰写p = (int*)&x
和w = (int*)x
时会发生什么?
另请注意,此程序仅在写入步骤1时执行。如果x
不包含自己的地址,则程序将显示错误。
答案 0 :(得分:0)
此步骤x = int(&amp; x)是否有效?
这有什么概念上的错误吗?
该陈述可能有效,可能引发未定义的行为。一切都取决于平台。
在我使用的许多平台上,地址从未签名。它们总是unsigned
,因为需要符号位来表示全部地址。换句话说,我建议:
unsigned int x =(unsigned int)&amp; x;
再次说明了符号位以及地址的表示方式。
如何可视化/解释当我们写p =(int *)&amp; x和w =(int *)x时会发生什么?
如果你想打印一个地址,我建议你使用指针格式:
cout << ((void *) &x) << endl;
或
printf("%p\n", &x);
我建议使用调试器而不是打印地址。调试器允许您检查指针中的值。但有时打印信息是一种更好的方法(比如使用多个任务或多个处理器)。