将自己的地址放入变量中

Posted

技术标签:

【中文标题】将自己的地址放入变量中【英文标题】: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

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

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

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

【问题讨论】:

不,当int 小于指针时这是无效的。 是的。那么第二个问题呢? 【参考方案1】:

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

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

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

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

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

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

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

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

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

【讨论】:

以上是关于将自己的地址放入变量中的主要内容,如果未能解决你的问题,请参考以下文章

将IP地址放入bash变量。有没有更好的办法

jquery中如何将函数放入数组变量并执行?

我们如何将整数变量放入任务字符串中?

从 IP 地址中分离出最后一个八位字节并将其放入变量中

怎么将通达信虚拟成交量的公式放入到自己成交量的公式中

如何将子节点放入自己的父节点?