golang学习之一:变量内存、变量地址、指针变量使用(*、&)

golang变量内存、变量地址、指针变量使用

package main

import "fmt"

func main() {
	// 每个变量有2层含义
	// 1、 变量的内存:变量的值,如 a = 10,10 就是变量的值,也就是变量对应的内存
	// 2、 变量的地址:变量值10所在的内存地址
	var a int = 10
	// a就是变量a的值(内存)
	fmt.Printf("a = %d\n", a) // a = 10
	// &a 表示的是变量a的地址
	fmt.Printf("&a = %v\n", &a) // &a = 0xc000012088

	// 那么我们如何存储a变量的地址呢?答案就是用指针类型
	// 指针类型表达式:*类型,如*int,
	var p *int // 表示int类型的指针变量,此时它存储的是int类型变量所指向的地址
	p = &a
	// 我们可以看到p的值 与&a是一样的,都是指向a的地址值
	fmt.Printf("p = %v, &a = %v\n", p, &a) // p = 0xc000012088, &a = 0xc000012088

	// 那么我们如果通过指针拿到指针对应的地址在内存中的值呢,就是通过p拿到a的值10 而不是a的地址呢?答案:指针前面加*
	fmt.Printf("*p = %v, a = %v\n", *p, a) // *p = 10, a = 10

	// 那么我们如果通过指针去修改a的值呢?
	*p = 666
	// 因为p -> &a 指向a在内存中的地址值, 相当于是对于a的引用,而且*p对应的就是a的值,所以我们直接通过给*p赋值即可达到给a变量赋值的效果。可以就把指针理解为java里的引用,通过引用修改变量的值,那么引用对应的对象的值也跟着修改了。引用相当与是遥控器,对象就是电视,通过遥控器可以修改电视的频道,音量等等。
	fmt.Printf("*p = %v, a = %v", *p, a) // *p = 666, a = 666
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值