golang 从函数返回对象

当你从 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

我在这里错过了一些非常明显的东西吗?任何澄清将不胜感激!


慕码人8056858
浏览 331回答 3
3回答

30秒到达战场

您正在此处打印指针的地址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

更改&i为i。您正在打印 i 的地址,而您应该打印 i 的值。func createPointerToInt() *int {     i := new(int)     fmt.Println(i);     return i;}func main() {    i := createPointerToInt();    fmt.Println(i);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go