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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |