Я изо всех сил пытаюсь понять, что происходит, когда вы возвращаете новый объект из функции в go.golang return object from function
У меня есть этот
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
Я пропускаю что-то стало очевидным здесь? Любые разъяснения будут очень признательны!
A конечно же! Какой дурак, спасибо! Я должен был знать, что: PI думаю, что я запутался, так как go не требует от вас помешать указателю, когда вы используете его как функцию (* object) .function или object-> в C, поэтому я решил, что адрес быть адресом указателя, а не указателем. Благодаря! – Tom
@Tom - добро пожаловать: D – Sadique
Небольшое дополнение к этому, и я думаю, почему я изначально путался. если вы создаете собственный тип (введите MyType struct {}) и используйте это вместо int, когда вы используете Println, вы получаете '& {}' вывод, а не адрес. Для пользовательского объекта вы знаете, как получить адрес для печати? – Tom