Go 指针的使用

Go 指针的使用

指针也是一种类型,也可以创建变量,称为指针变量。指针变量类型为 *Type,该指针指向一个Type类型的变量,指针变量最大的一个特点就是存储某个实际变量的内存地址,通过记录某个变量的地址,从而间接操作该变量

在这里插入图片描述

创建指针
  • 通过普通定义变量获取指针

    func pointer() {
    	x := 100
    	y := &x
    	fmt.Println("x=", x)
    	fmt.Println("*y=", *y)
    	fmt.Println("&x=", &x)
    	fmt.Println("y=", y)
        /**
    	x= 100
    	*y= 100
    	&x= 0xc000018098
    	y= 0xc000018098
    	*/
        //&:可以从一个变量中取得内存地址
        //*:赋值的左边,指该指针指向的变量,赋值的右边指:指针变量中取得的变量值(解引用)
    }
    
  • new 先创建指针并分配好内存,再给指针写入值

    pointer1 := new(string)
    *pointer1 = "大西米从"
    fmt.Println(pointer1) //0xc000088220
    fmt.Println(*pointer1)//大西米从
    
  • 先声明一个指针变量,再从其他变量获取内存地址指针变量

    x3 := "乐园支架"
    var p *string
    p = &x3
    fmt.Println(p)//0xc00004e270
    
  • 如果指针声明后没有进行初始化,其默认值为nil

    var prt *string
    fmt.Println(prt)//nil
    
  • 在函数中对指针所做的修改,在函数返回后会保存相应的修改

    func change(value *int) {
    	*value = 7
    }
    func changeTest() {
    	x := 99
    	prt := &x
    	fmt.Println("改变值之前:x=", *prt)//99
    	change(prt)
    	fmt.Println("改变值之后:x=", *prt)//7
        //函数传入的是指针参数,即为内存地址,所以在函数内的修改是在内存地址的修改,在函数执行之后还会保存结果
    }
    
  • 切片与指针一样是引用类型,如果我们通过一个函数改变一个数值,可以将该数组的切片作为参数传递给函数,也可以将这个数组的指针作为参数传递给函数,但是Go中建议使用第一种方法,即是将数组的切片作为参数传递给函数,因为这样编写简单易读

    //使用切片
    func chaneSlice(value []int) {
    	value[0] = 34
    }
    
    //使用数组
    func chaneArray(value *[3]int) {
    	value[0] = 38
    }
    
    func changeTest() {
    	x := [3]int{90, 80, 56}
    	chaneSlice(x[:])
    	fmt.Println("切片传参:x=", x) 
    
    	y := [3]int{900, 800, 560}
    	chaneArray(&y)
    	fmt.Println("数组传参:y=", y)
    	
    	/**
    	切片传参:x= [34 80 56]
    	数组传参:y= [38 800 560]
    	*/
    }
    
  • Go中不支持指针运算(如:p++)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值