1. package main
    2. import "fmt"
    3. func main() {
    4. //在计算机底层 a 这个变量其实对应了一个内存地址
    5. // var a int = 10
    6. // fmt.Printf("a的值:%v a的类型%T a的地址%p", a, a, &a) //a的值:10 a的类型int a的地址0xc0000100a8
    7. // 指针也是一个变量,但它是一种特殊的变量,它存储的数据不是一个普通的值,而是另 一个变量的内存地址
    8. // var a = 10
    9. // var p = &a //p指针变量 p的类型 *int(指针类型)
    10. // fmt.Printf("a的值:%v a的类型%T a的地址%p\n", a, a, &a)
    11. // fmt.Printf("p的值:%v p的类型%T", p, p)
    12. //每一个变量都有自己的内存地址
    13. var a = 10
    14. var p = &a //p指针变量 p的类型 *int(指针类型)
    15. fmt.Printf("a的值:%v a的类型%T a的地址%p\n", a, a, &a)
    16. fmt.Printf("p的值:%v p的类型%T p的地址%p", p, p, &p)
    17. }
    1. package main
    2. import "fmt"
    3. func main() {
    4. a := 10
    5. p := &a //p指针变量 类型 *int
    6. // *p :表示取出p这个变量对应的内存地址的值
    7. fmt.Println(p) //a的地址 0xc0000100a8
    8. fmt.Println(*p) //*p 表示打印a对应的值 10
    9. *p = 30 //改变p这个变量对应的内存地址的值
    10. fmt.Println(a) //30
    11. }
    1. package main
    2. import "fmt"
    3. func fn1(x int) {
    4. x = 10
    5. }
    6. func fn2(x *int) {
    7. *x = 40
    8. }
    9. func main() {
    10. var a = 5
    11. fn1(a)
    12. fmt.Println(a) //5
    13. fn2(&a)
    14. fmt.Println(a) //40
    15. }
    1. package main
    2. import "fmt"
    3. func main() {
    4. // var userinfo map[string]string
    5. // userinfo["username"] = "张三"
    6. // fmt.Println(userinfo)
    7. // var userinfo = make(map[string]string)
    8. // userinfo["username"] = "张三"
    9. // fmt.Println(userinfo)
    10. // var a []int
    11. // a[0] = 1
    12. // fmt.Println(a)
    13. // var a = make([]int, 4, 4)
    14. // a[0] = 1
    15. // fmt.Println(a)
    16. var a *int //指针也是引用数据类型
    17. *a = 100
    18. fmt.Println(*a)
    19. }
    1. package main
    2. import "fmt"
    3. func main() {
    4. // 实际想开发中 new 函数不太常用,使用 new 函数得到的是一个指类型针,并且该指针对应的值为该类型的零值
    5. // var a = new(int) //a是一个指针变量 类型是 *int的指针类型 指针变量对应的值是0
    6. // fmt.Printf("值:%v 类型:%T 指针变量对应的值:%v", a, a, *a) //值:0xc0000a0090 类型:*int 指针变量对应的值:0
    7. /*
    8. 错误的写法
    9. var a *int //指针也是引用数据类型
    10. *a = 100
    11. fmt.Println(*a)
    12. */
    13. //new方法给指针变量分配存储空间
    14. // var b *int
    15. // b = new(int)
    16. // *b = 100
    17. // fmt.Println(*b) // fmt.Println(*a)
    18. var f = new(bool)
    19. fmt.Println(*f) //false
    20. }