当你从 go 中的函数返回一个新对象时,我很难理解到底发生了什么。
我有这个
func createPointerToInt() *int {
i := new(int)
fmt.Println(&i);
return i;
}
func main() {
i := createPointerToInt();
fmt.Println(&i);
}
打印返回的值是
0x1040a128
0x1040a120
我希望这两个值相同。我不明白为什么会有 8 字节的差异。
在我看到的等效 C 代码中:
int* createPointerToInt() {
int* i = new int;
printf("%#08x\n", i);
return i;
}
int main() {
int* r = createPointerToInt();
printf("%#08x\n", r);
return 0;
}
返回的地址是一样的:
0x8218008
0x8218008
我在这里错过了一些非常明显的东西吗?任何澄清将不胜感激!
30秒到达战场
慕码人2483693
相关分类