当你从 go 中的函数返回一个新对象时,我很难理解到底发生了什么。我有这个func createPointerToInt() *int { i := new(int) fmt.Println(&i); return i;}func main() { i := createPointerToInt(); fmt.Println(&i);}打印返回的值是0x1040a1280x1040a120我希望这两个值相同。我不明白为什么会有 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;}返回的地址是一样的:0x82180080x8218008我在这里错过了一些非常明显的东西吗?任何澄清将不胜感激!
3 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
您正在此处打印指针的地址fmt.Println(&i);。尝试这个:
func main() {
i := createPointerToInt();
fmt.Println(i); //--> Remove the ampersand
}
i是从返回的指针createPointerToInt-&i而是您尝试打印的指针的地址。请注意,在您的 C 示例中,您正确打印了它:
printf("%#08x\n", r);
^No ampersand here
慕码人2483693
TA贡献1860条经验 获得超9个赞
更改&i为i。您正在打印 i 的地址,而您应该打印 i 的值。
func createPointerToInt() *int {
i := new(int)
fmt.Println(i);
return i;
}
func main() {
i := createPointerToInt();
fmt.Println(i);
}
- 3 回答
- 0 关注
- 330 浏览
添加回答
举报
0/150
提交
取消