Go基础_1_33 指针

Tutorial: Go初级 Category: Go Published: 2026-04-07 13:58:26 Views: 21 Likes: 0 Comments: 0
package main

import "fmt"

func main() {
    /*
        指针:pointer
            存储了另一个变量的内存地址的变量。

    */

    // 1.定义一个int类型的变量
    a := 10
    fmt.Println("a的数值是:", a)     // 10
    fmt.Printf("%T\n", a)        // int
    fmt.Printf("a的地址是:%p\n", &a) //0xc0000140a8

    // 2.创建一个指针变量,用于存储变量a的地址
    var p1 *int
    fmt.Println(p1) // <nil>,空指针
    p1 = &a
    fmt.Println("p1的数值:", p1)       // p1的数值: 0xc0000140a8
    fmt.Printf("p1自己的地址:%p\n", &p1) // p1自己的地址:0xc000006030
    fmt.Println("p1的数值,是a的地址,该地址存储的数据:", *p1)
    // p1的数值,是a的地址,该地址存储的数据: 10

    // 3.操作变量,更改数值 ,并不会改变地址
    a = 100
    fmt.Println(a)
    fmt.Printf("%p\n", &a) // 0xc0000140a8

    // 4.通过指针,改变变量的数值
    *p1 = 200
    fmt.Println(a) // 200

    // 5.指针的指针
    var p2 **int
    fmt.Println(p2)                     // <nil>
    p2 = &p1                            //
    fmt.Printf("%T,%T,%T\n", a, p1, p2) // int, *int, **int
    fmt.Println("p2的数值:", p2)           // p2的数值: 0xc000006030  p1的地址
    fmt.Printf("p2自己的地址:%p\n", &p2)     // p2自己的地址:0xc000006038
    fmt.Println("p2中存储的地址,对应的数值,就是p1的地址,对应的数据:", *p2)
    // p2中存储的地址,对应的数值,就是p1的地址,对应的数据: 0xc0000140a8
    fmt.Println("p2中存储的地址,对应的数值,再获取对应的数值:", **p2)
    // p2中存储的地址,对应的数值,再获取对应的数值: 200

}