В чем разница между указателем структуры и целочисленным указателем? - PullRequest
0 голосов
/ 29 июня 2018
package main

import "fmt"

type Employee struct {
    ID int
    Name string
}

func main(){
    var zhexiao Employee
    zhexiao.Name = "xiao"
    fmt.Println(&zhexiao)

    x := 1
    p := &x
    fmt.Println(p)
}

Приведенный выше код выводит два вида указателей.

  1. Выход указателя структуры: &{0 xiao}
  2. вывод целочисленного указателя: 0xc0420600b0 (выглядит как адрес памяти)

Почему вывод указателя структуры не является адресом памяти? Если это не адрес памяти, что это?

Большое спасибо Же

1 Ответ

0 голосов
/ 29 июня 2018

Это зависит от того, как вы на это смотрите. Вы неявно используете пакет fmt стандартный глагол печати (%v). Вот несколько других способов взглянуть на это, явно используя другие печатные глаголы.

package main

import "fmt"

type Employee struct {
    ID   int
    Name string
}

func main() {
    var zhexiao Employee
    zhexiao.Name = "xiao"
    fmt.Printf("%[1]v %[1]p\n", &zhexiao)

    x := 1
    fmt.Printf("%[1]v %[2]p\n", x, &x)
    p := &x
    fmt.Printf("%[1]v %[1]p\n", p)
}

Детская площадка: https://play.golang.org/p/4dV8HtiS8rP

Выход:

&{0 xiao} 0x1040a0d0
1 0x1041402c
0x1041402c 0x1041402c

Ссылка: Тип упаковки: Печать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...