五、go指针

指针的定义

指针是另一个与变量相关且必须掌握的要素。在 Go 语言中声明变量时, 将在计算机内存 中给它分配一个位置,以便能够存储、 修改和获取变量的值。

&与*符号含义

&:打印出地址值而非变量值
*:通过指针访问对象目标
例一

//使用&获取地址值
func main() {
	s := "helloworld"
	fmt.Println(&s)
	}
	输出结果为16进制地址值 0xc000090020

例二

//使用*获取指针访问对象目标
func main() {
	s := "helloworld"
	var p = &s
	fmt.Println(*p)
	//这里先将变量s的地址值赋值给p,使用*打印出p的实际值

例三

s := "helloworld"
	var p = &s
	fmt.Println(s)
	fmt.Println(*p)
	fmt.Println(&s)
	fmt.Println(p)
	//可以发现&s与p是一致的,这里p = &s,是把s的内存空间值赋值给了p,但是单独打印&p的值仍然是不一致的
	//可以发现s与*p是一致的,这里的*p成为解引用或间接引用,在这里就是间接引用的s的值
	//简单的来说就是*p通过&s赋值,使用了s的内存空间进而间接使用了s空间中存储的值
	}

例四

s := "hello"
	var p *string = &s
	fmt.Println(*p)
	s = "hello world"
	fmt.Println(*p)
	s = "hello world go"
	fmt.Println(*p)
	}
	#结果
	hello
	hello world
	hello world go
//这里证明了,当p使用s的地址时,相当于使用s的变量地址来操作s

例子四-操作利用*指针修改值

func main() {
	x, y := 1, 2
	swap(&x, &y)
	fmt.Println(x, y)
}
func swap(a, b *int) {
	t := *a
	*a = *b
	*b = t
}

空指针-nil

func main() {
	var s *string
	fmt.Println(s)
	if s == nil {
		fmt.Println("Sorry, no data")
	}
}
#输出结果nil,与在其他语言中null none 一个意义

向函数传递指针参数

func main() {
	s := 10
	modify(s)
	fmt.Println(s)
	modify1(&s)
	fmt.Println(s)
}
func modify(x int) {
	x = 100 //这里未修改为100
}
func modify1(x *int) {
	*x = 100 //这里成功修改成100
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值