【问题标题】:Get address from const从 const 获取地址
【发布时间】:2015-05-06 19:17:16
【问题描述】:

来自manual

可以得到变量的地址,但不能用在通过let语句声明的变量上

我了解这样做是为了确保安全。现在,如果我想不惜一切代价从 const 获取地址,是否有解决方法?

【问题讨论】:

    标签: pointers constants nim-lang


    【解决方案1】:

    常量确实没有地址,它们甚至可能根本不存储在任何地方。让我们看看这个小程序,看看它的中间 C 源代码发生了什么:

    const x = 10
    echo x
    echo x + 1
    

    相关的 C 代码如下所示:

    STRING_LITERAL(TMP5, "10", 2);
    STRING_LITERAL(TMP6, "11", 2);
    
    NIM_EXTERNC N_NOINLINE(void, xInit)(void) {
        printf("%s\012", ((NimStringDesc*) &TMP5)? (((NimStringDesc*) &TMP5))->data:"nil");
        printf("%s\012", ((NimStringDesc*) &TMP6)? (((NimStringDesc*) &TMP6))->data:"nil");
    }
    

    所以计算实际上是在编译时完成的,echo 的最终字符串存储在程序中,而不是 int x

    【讨论】:

    • 谢谢,很好的解释。如果我想从let var 检索地址怎么办?
    • @Arrrrrrr:这正是我一直想知道的,leading to this follow-up question
    • 感谢您的通知@bluenote10
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多