为了账号安全,请及时绑定邮箱和手机立即绑定

golang 从函数返回对象

golang 从函数返回对象

Go
慕码人8056858 2021-09-20 09:03:33
当你从 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


查看完整回答
反对 回复 2021-09-20
?
慕码人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);

}


查看完整回答
反对 回复 2021-09-20
  • 3 回答
  • 0 关注
  • 330 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信