Go中的指针

1.值传递

在这里插入图片描述

2.指针传递

函数执行步骤如下:

  1. p *int

定义指针类型的变量 ⇒ &p = 0x0843A048, p(内存)=0x0000000 # 0的地址位置

即:指针实质: p指向了0的内存地址
在这里插入图片描述

  1. var a=1

定义a ⇒ a(内存)=1, &a = 0x0843A040

  1. &a

a的指针地址 ⇒ &a = 0x0843A040

  1. p = &a

p(内存)=0x0843A040, &p = 0x0843A048
(p的虚拟内存地址是没变的,变的是储存在内存里的"地址")
即:指针实质: p指向了a的内存地址在这里插入图片描述

  1. 区分p=10和*p=10

p = 10 ⇒ p(内存)=10, p和a的指针联系断掉
*p= 10 ==> 即找到p对应的虚拟内存地址,然后找到对应的内存值,然后修改 > 找0x0843A040> 找0x0843A040 ==>1 变为10
在这里插入图片描述

3.练习题:交互2个值

package main

import "fmt"

/*
// 不会交换a,b
func swap(a, b int) {
	var temp int
	temp = a
	a = b
	b = temp
}
*/

func swap(pa, pb *int) {
	var temp int
	temp = *pa // 将a所对应的内存值暂存
	*pa = *pb
	*pb = temp
}

func main() {
	var a int = 10
	var b int = 20
	swap(&a, &b)
	fmt.Println("a=", a, "b=", b)
}

4.go中的二级指针

func main() {
	var a int = 10
	fmt.Println("a=", a)

	var p *int
	p = &a
	fmt.Println("&a =", &a) //&a = 0xc000012098
	fmt.Println("p =", p)   // p = 0xc000012098
	fmt.Println("&p =", &p) //&a = &p = 0xc00000e030

	var pp **int // 二级指针
	pp = &p
	fmt.Println("&p =", &p) //&a = &p = 0xc00000e030
	fmt.Println("pp =", pp) // pp = 0xc00000e030
}s

感觉兴趣的小伙伴可以加好友一起交流!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值