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

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