将自己的地址放入变量中

Putting own address in variable

本文关键字:变量 自己的 地址      更新时间:2023-10-16
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

  1. 此步骤x = int(&x)有效吗?这在概念上有什么错误吗?

  2. 如何可视化/解释当我们写p = (int*)&xw = (int*)x时发生的事情?

请注意,此程序仅在写入步骤1时执行。如果x不包含自己的地址,则程序将显示错误。

这个步骤x=int(&x)有效吗
这在概念上有什么错误吗?

该语句可能有效,并可能引发未定义的行为。一切都取决于平台。

在我合作过的许多平台上,地址从未签名。它们总是unsigned,因为需要符号位来表示地址的整个范围。换句话说,我建议:unsigned int x=(unsigned整型)&x;

同样,它是关于符号位和地址的表示方式。

如何可视化/解释当我们写p=(int*)&x和w=(int*)x?

如果您想打印地址,我建议您使用指针格式:

cout << ((void *) &x) << endl;

printf("%pn", &x);

我建议使用调试器,而不是打印地址。调试器允许您检查指针中的值。但有时打印信息是一种更好的方法(比如处理多个任务或多个处理器时)。