从const获取地址

时间:2015-05-06 19:17:16

标签: pointers const nim

来自manual

  

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

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

1 个答案:

答案 0 :(得分:6)

Consts真的没有地址,甚至可能根本没有存储。让我们看看这个小程序,看看它的中间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