【问题标题】:Putting own address in variable将自己的地址放入变量中
【发布时间】:2015-04-21 18:14:25
【问题描述】:
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(&amp;x) 有效吗?这在概念上有什么问题吗?

  2. 当我们写p = (int*)&amp;xw = (int*)x时如何可视化/解释发生了什么?

还请注意,该程序仅在编写步骤 1 时执行。如果x不包含自己的地址,那么程序会报错。

【问题讨论】:

  • 不,当int 小于指针时这是无效的。
  • 是的。那么第二个问题呢?

标签: c++ variables pointers casting


【解决方案1】:

这一步 x = int(&x) 有效吗?
这在概念上有什么问题吗?

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

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

同样是关于符号位以及地址的表示方式。

当我们编写 p = (int*)&x 和 w = (int*)x 时,如何可视化/解释会发生什么?

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

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

 printf("%p\n", &x);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多