G

[Golang基础语法] 指针

RoLingG Golang 2024-03-15

指针

  1. go语言的指针可以是bool、string、int、float。
  2. 指针初始化但未赋值,其默认值为。(这里也就说明了切片就是用了指针)
  3. 函数传入的指针,也就是内存地址,在函数内部修改,也就是在内存地址上修改,修改结果会仍然保存(类似引用)。
  4. go语言中不支持指针的运算。
  5. 一些指针的常规用法:

    func main() {
        //通过定义普通变量获取指针(短声明)
        x := "1"
        y := &x    //y指向x
        fmt.Println("x =", x)
        fmt.Println("&x =", &x)
        fmt.Println("y(&x) =", y)
        fmt.Println("*y =", *y)
        fmt.Println("")
        /*
        输出为:
            x = 1
            &x = 0xc000108240
            y(&x) = 0xc000108240
            *y = 1
        */
    
        //先通过new创建指针并分配好内存,再给指针写入值
        ptr := new(string)
        *ptr = "2"
        fmt.Println("ptr =", ptr)
        fmt.Println("*ptr =", *ptr)
        fmt.Println("")
        /*
        输出为:
            ptr = 0xc000108270
            *ptr = 2
        */
    
        //先声明一个指针变量,再从其他指针变量获取内存地址及其指针变量
        ptr2 := "3"
        var ptr3 *string = &ptr2
        fmt.Println("&ptr2 =", &ptr2)
        fmt.Println("ptr3(&ptr2) =", ptr3)
        fmt.Println("*ptr3 =", *ptr3)
        /*
        输出为:
            &ptr2 = 0xc000108290
            ptr3(&ptr2) = 0xc000108290
            *ptr3 = 3
        */
        //写到这里其实不难看出,指针就是指向一个地址,然后引用这个地址即获取这个地址的存放值。
        //如上ptr3,指向了ptr2的地址,所以它本身存放ptr2的地址,只有用了指针指向自己才会通过地址去获取ptr2的值。
    }
PREV
[Golang基础语法] 数组与切片
NEXT
[Golang基础语法] if语句

评论(0)

发布评论