golang学习-指针

1、定义

指针也是一个变量,但它是一个特殊的变量,它存储的是另一个变量的内存地址。是引用数据类型。

取一个变量的地址:&a

定义: var p *int = &a

可以理解为 指针变量p中存储的是a的内存地址,但是变量p也有自己的内存地址。

Go 复制代码
func main() {
	//golang中所有的变量都对应一个内存地址
	a := 10
	var p = &a
	fmt.Printf("p的值是%v,p的类型是%T,p的地址是%p", p, p, &p)
}
2、指针取值

*p 表示的是 取出p这个变量对应的内存地址的值。

&p 变身指针变量的内存地址。

Go 复制代码
func main() {
	//golang中所有的变量都对应一个内存地址
	a := 10
	var p = &a      // 指针变量
	fmt.Println(p)  // 打印的是a的内存地址 0xc00000a0a8
	fmt.Println(*p) //打印的是a的值  10
	*p = 30 //改变 p 这个变量对应的内存的值
	fmt.Println(a)
}
3、new和make函数分配内存空间

在 Go 语言中 对于引用类型的变量,我们在使用的时候不仅要声明它,还要为它分配内存空间 。

Go 语言中 new 和 make 是内建的两个函数,主要用来分配内存。

new函数分配内存空间

Go 复制代码
func main() {
	//new 关键词来声明一个指针, new分配内存
	var b *int
	b = new(int)
	*b = 10
	fmt.Println(b, *b, &b)
}

make函数分配内存空间

make函数也可以分配内存空间,但是和new不同的,make只于slice、map以及channel。

Go 复制代码
func main() {
	userInfo := make(map[string]string)
	userInfo["name"] = "张三"
	a := make([]int, 4, 4)
	a[0] = 1
	fmt.Println(userInfo, a)
}

new函数和make函数的区别

1、两个都是做内存分配。

2、make只用于slice、map以及channel的初始化,返回的还是这三个引用类型的本身。

3、new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针

相关推荐
【上下求索】16 分钟前
学习笔记094——Ubuntu 如何部署 frp 客户端服务?
笔记·学习·ubuntu
大胡子大叔1 小时前
【与身俱能】机械臂训练(学习笔记)
笔记·学习
关于不上作者榜就原神启动那件事1 小时前
Redis学习文档
数据库·redis·学习
●VON1 小时前
2025年人工智能新方向:从算力竞赛到智能体生态
人工智能·学习
陈逸轩*^_^*1 小时前
操作系统复习题库(期末速通版)
学习·操作系统·期末复习
pixle02 小时前
从零学习Node.js框架Koa 【七】Koa实战:构建企业级邮箱验证注册系统
javascript·学习·node.js·koa·注册·全栈·邮箱注册
南_山无梅落2 小时前
4-Python3输入输出学习笔记:input()与print()的灵活使用
笔记·python·学习·input·print
嵌入式小能手2 小时前
飞凌嵌入式ElfBoard-文件I/O的深入学习之I/O多路复用
linux·服务器·学习
桃子叔叔2 小时前
CoOp:Visual-Language Model从静态模板到动态学习新范式
人工智能·学习·语言模型
m0_689618282 小时前
灵感源自锁子甲!“刚柔互锁“ 超结构,让无人机雷达隐身率超98%
学习·无人机