将自己的地址放在变量中

时间:2015-04-21 18:14:26

标签: c++ variables pointers casting

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

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

  2. 如何形象化/解释撰写p = (int*)&xw = (int*)x时会发生什么?

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

1 个答案:

答案 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);

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