4. go指针的使用

指针

指针就是一个指向另一个内存地址变量的值

go语言的指针

  • go指针不能运算
  • Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。
  • Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。

示例

var a, b int= 1, 2
swap2(&a, &b)
fmt.Println(a, b)

func swap2(a , b *int)  {
	*a, *b = *b, *a
}

如何使用指针

  • 定义指针变量。
  • 为指针变量赋值。
  • 访问指针变量中指向地址的值。
  • 获取指针的值 在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。
package main

import "fmt"

func main() {
   var a int= 20   /* 声明实际变量 */
   var ip *int        /* 声明指针变量 */

   ip = &a  /* 指针变量的存储地址 */

   fmt.Printf("a 变量的地址是: %x\n", &a  )

   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量储存的指针地址: %x\n", ip )

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d\n", *ip )
}

// 输出
a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20

go空指针

  • 当一个指针被定义后没有分配到任何变量时,它的值为 nil。
  • nil 指针也称为空指针。
  • nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。
  • 一个指针变量通常缩写为 ptr。
package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("ptr 的值为 : %x\n", ptr  )
   
   // 通过判断指针变量是否等于 nil 判断其是否是 空指针
   if(ptr != nil)  {
       fmt.Println("ptr 不是空指针")
   }   
   
   if(ptr == nil)  {
       fmt.Println("ptr 是空指针")
   }
}

指针不要操作没有合法指向的内存

var p * int
p = nil
fmt.Printf("p = %v", p)
*p = 666 //错误, 指针不要操作没有合法指向的内存

new函数的使用

//p是*int类型,指向int类型
p = new(int)
*p = 666
fmt.Printf("*p = %d", *p)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值