008.Go语言中的指针

目录

1.初识指针

2.数组指针与指针数组

3.指针作为函数的参数和返回值


1.初识指针

/*
指针变量:存储变量内存地址的变量
	定义格式:
		var 指针变量名 *被指向的变量类型 
	&:取变量的内存地址
	*:取指针变量指向地址的值
*/
func main() {

	//1.定义普通变量
	var a int = 10
	fmt.Printf("变量a的值:%d,变量a内存地址的数据类型:%T,变量a的内存地址值:%p\n", a, &a, &a) //变量a的值:10,变量a内存地址的数据类型:*int,变量a的内存地址值:0xc00001c088

	//2.定义指针变量
	var p *int = &a
	fmt.Printf("指针变量p的值:%p,指针变量p对应的数据内容:%d,指针变量p的内存地址值:%p\n", p, *p, &p) //指针变量p的值:0xc00001c088,指针变量p对应的数据内容:10,指针变量p的内存地址值:0xc00000a030

	//3.通过指针修改对应变量的内容
	*p = 20
	fmt.Println(a, *p) //20 20

	//4.再定义一个指针变量,指向指针变量p
	var ptr **int = &p
	fmt.Printf("指针变量ptr的值:%p,指针变量ptr对应的数据内容:%p,指针变量ptr指向的指针变量p指向的变量a的值:%d\n", ptr, *ptr, **ptr) //指针变量ptr的值:0xc00000a030,指针变量ptr对应的数据内容:0xc00001c088,指针变量ptr指向的指针变量p指向的变量a的值:20

	//5.通过指针变量ptr修改a的值
	**ptr = 30
	fmt.Println(a, *p, **ptr) //30 30 30
}

2.数组指针与指针数组

/*
数组指针与指针数组
	数组指针:数组类型的指针;格式 *[长度]类型
	指针数组:存储指针类型的数组;格式 [长度]*类型
*/
func main() {
	//1 数组指针
	//1.1 定义一个数组
	arr := [...]int{1, 2, 3, 4, 5}
	fmt.Printf("数组arr的值:%d,数组arr内存地址的类型%T,数组arr的内存地址%p\n", arr, &arr, &arr)
	//1.2 定义一个数组类型的指针,指向数组arr
	var p *[5]int = &arr
	fmt.Printf("数组指针p的值:%p,数组指针对应的数据内容:%d,数组指针的内存地址%p\n", p, *p, &p)
	//1.3 通过数组指针修改数组的值
	(*p)[0] = 10
	fmt.Println(arr, *p)
	//1.4 简化写法 指针指向什么它就是什么
	p[0] = 100
	fmt.Println(arr, *p)

	//2.指针数组
	//2.1 定义一些变量
	var a, b, c, d int = 9, 8, 7, 6
	//2.2 将变量的内存地址存储到指针数组中
	var ptr = [4]*int{&a, &b, &c, &d}
	//2.3通过指针数组修改变量值
	*ptr[0] = 90
	fmt.Println(a)
}

3.指针作为函数的参数和返回值

// 指针作为函数的参数
func f1(p *int) {
	*p = 10
}

// 指针作为函数的返回值
func f2() *[5]int {
	var arr = [5]int{1, 2, 3, 4, 5}
	return &arr
}
func main() {
	//1.指针作为函数的参数
	var a int = 1
	f1(&a)         //由于传递的是地址值,函数传递基本类型的变量变量a的值也会修改
	fmt.Println(a) //10
	//2.指针作为函数的返回值
	p := f2()
	fmt.Printf("指针变量p的值:%p,指针变量p对应的数据内容:%d\n", p, *p) //指针变量p的值:0xc00000e360,指针变量p对应的数据内容:[1 2 3 4 5]
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值