golang学习-指针

这篇具有很好参考价值的文章主要介绍了golang学习-指针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、定义

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

golang学习-指针,golang学习,学习

取一个变量的地址:&a 

定义: var p *int = &a

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

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

golang学习-指针,golang学习,学习

2、指针取值

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

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

func main() {
	//golang中所有的变量都对应一个内存地址
	a := 10
	var p = &a      // 指针变量
	fmt.Println(p)  // 打印的是a的内存地址 0xc00000a0a8
	fmt.Println(*p) //打印的是a的值  10
	*p = 30 //改变 p 这个变量对应的内存的值
	fmt.Println(a)
}

golang学习-指针,golang学习,学习

3、new和make函数分配内存空间

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

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

new函数分配内存空间

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

 make函数分配内存空间

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

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用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针文章来源地址https://www.toymoban.com/news/detail-783372.html

到了这里,关于golang学习-指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Golang对比Java、python为什么要保留指针

    平时我们在Golang使用指针一般是为了以下的情况: 方法直接修改原来对象 保证参数传递的自由,可以在传递重量级对象时使用指针 但Go 保留指针不仅仅是为了解决传递参数的问题,还跟它的语言特性有密不可分的联系。 Go 里面的变量是 值语义 ,这个跟 C/C++是一脉相承的。

    2024年01月17日
    浏览(71)
  • Golang struct 结构体指针类型 / 结构体值类型

    结构体变量之间的赋值是值拷贝。 当需要通过变量去修改另外一个结构体内容的时候,可以通过传递地址的方式来达到这个效果。 这样使用肯定是不对的,因为.的运算优先级要高,所以先会去执行p2.age,之后又取地址,所以这个就不行。 在代码执行的时候先执行.的操作,

    2024年02月13日
    浏览(43)
  • golang中的指针方法和值方法的区别,编程时该如何选择呢?

    我们都知道,方法的接收者类型必须是某个自定义的数据类型,而且不能是接口类型或接口的指针类型。所谓的值方法,就是接收者类型是非指针的自定义数据类型的方法。 Choosing whether to use a value or pointer receiver on methods can be difficult, especially to new Go programmers. If in doubt, use

    2024年02月09日
    浏览(79)
  • golang学习-golang结构体和Json相互转换

    1、结构体转为json对象     v, _ := json.Marshal(student)     jsonStr := string(v) // 结构体转为json对象 2、json字符串转为结构体     var s1 Student     err := json.Unmarshal([]byte(str), s1) //json 字符串转为结构体    3、结构体标签 表示的是转换为json对象时,ID字段变为id,Name字段变为name. type

    2024年01月23日
    浏览(55)
  • golang学习-函数

    1、匿名函数 没有函数名的函数,格式如下: func(参数)返回值{ 函数体 } 2、闭包 全局变量的特点:常驻内存、污染全局 局部变量的特点:不常驻内存、不污染全局 闭包:可以让一个变量常驻内存并且不污染全局 概念:可以访问另一个函数作用域中的变量的函数 注意:由于

    2024年02月02日
    浏览(43)
  • Golang爬虫学习

    2023年将会持续于B站、CSDN等各大平台更新,可加入粉丝群与博主交流:838681355,为了老板大G共同努力。 【商务合作请私信或进群联系群主】 1.1 简介和示例 1.2 爬虫解析页面 1.2.1 解析链接页面 1.2.2 解析内容页面 1.2.3 代码实例 1.3 保存至文件 1.4 保存至数据库 2.1 爬取示例 2.2

    2024年02月11日
    浏览(42)
  • golang学习-channel管道

    1、定义 管道是golang语言提供的goroutine间的通讯方式,channel可以让一个goroutine发送特定的值给另一个goroutine的通讯机制。 管道是引用类型。 golang语言中channel是一种特殊的类型。像一个队列一样,先进先出。 var 变量 chan 元素类型 var ch1 chan int //声明一个传递整型的管道 var

    2024年01月19日
    浏览(50)
  • Golang学习+深入(十一)-文件

    目录 一、概述 1、文件 1.1、打开文件和关闭文件 1.2、读文件 1.3、写文件 1.4、判断文件是否存在 1.5、拷贝文件 文件: 文件是数据源(保存数据的地方) 的一种,比如word文档,txt文件,excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存

    2023年04月14日
    浏览(60)
  • golang学习-goroutine

    1、goroutine协程 goroutine 是 Go 语言支持并发的核心,一个goroutine会以一个很小的栈开始其生命周期,一般只需要2KB。区别于操作系统线程由系统内核进行调度, goroutine 是由Go运行时(runtime)负责调度。例如Go运行时会智能地将 m个goroutine 合理地分配给n个操作系统线程,实现类

    2024年01月18日
    浏览(42)
  • 开启golang学习之路

    Go 编程语言是一个开源项目,旨在提高程序员的工作效率。 Go 富有表现力、简洁、干净且高效。它的并发机制使编写能够充分利用多核和联网机器的程序变得容易,而其新颖的类型系统可以实现灵活和模块化的程序构建。 Go 可以快速编译为机器代码,同时还具有垃圾收集的

    2024年01月25日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包