加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang从函数返回对象

发布时间:2020-12-16 09:27:48 所属栏目:大数据 来源:网络整理
导读:当我从go中的函数返回一个新对象时,我正在努力弄清楚到底发生了什么. 我有这个 func createPointerToInt() *int { i := new(int) fmt.Println(i); return i;}func main() { i := createPointerToInt(); fmt.Println(i);} 返回的值是 0x1040a1280x1040a120 我
当我从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("%#08xn",i);
    return i;
}

int main() {
    int* r = createPointerToInt();
    printf("%#08xn",r);
    return 0;
}

返回的地址是相同的:

0x8218008
0x8218008

我在这里错过了一些令人目眩的事吗?任何澄清将不胜感激!

解决方法

您正在此处打印指针的地址fmt.Println(& i);.试试这个:

func main() {
    i := createPointerToInt();
    fmt.Println(i); //--> Remove the ampersand
}

我是从createPointerToInt返回的指针 – 而& i是您尝试打印的指针的地址.请注意您的C示例中正确打印它:

printf("%#08xn",r);
                 ^No ampersand here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读