Go 面试题 002:Go 中的指针有什么作用?

欢迎大家再次来到 『Go 语言面试题库』 这个专栏,前几天一直在准备面试,也还没有抽空时间来把最近几天写的这些内容发表出来。

从今天开始,我会日更这个系列的文章,希望跟大家一些学习进步。

再次说明一下,前面几篇都非常的基础,本来我也不想发表这么基础的题,有的可能一句话就能回答的事情,也没什么可以写的。

但考虑该系列专栏的系统性,又不得不写,因为我是希望该系列专栏能适用于所有的人。

但同时我也不占用大家的时间线,就一次性利用二栏,三栏,四栏等的位置,把这些基础的内容全部发表出来。

后续可能也还会补充一些基础的,到时也会采用这个发文策略。

先跟大家汇报一下进度,到今天(2021.9.25)为止,我已经完成了 34 篇。

由于文章主题都是临时起意,想到什么写什么,并没有提前列好提纲,因此基础和进阶的内容会交叉发布,这一点再声明一下,大家可以按需阅读。

同时我对已完成的文章进行了分类,发布到了 Github 上:

链接:https://github.com/iswbm/golang-interview

整个系列的文章目录,你可以点击本篇文章顶部的 『Go 语言面试题库』进入浏览。

第二题 请听题: Go 中的指针有什么用?

什么是指针和指针变量

普通的变量,存储的是数据,而指针变量,存储的是数据的内存地址。

学习指针,主要有两个运算符号,要记牢

  • &:地址运算符,从变量中取得值的内存地址
// 定义普通变量并打印
age := 18
fmt.Println(age) //output: 18

ptr := &age
fmt.Println(ptr) //output: 
  • *:解引用运算符,从内存地址中取得存储的数据
myage := *ptr
fmt.Println(myage) //output: 18

指针的意义是什么?

意义一:省内存

当你往一个函数传递参数时,若该参数是一个值类型的变量,则在调用函数时,会将原来的变量的值拷贝一遍。

假想每次传参都用数组,那么每次数组都要被复制一遍。如果数组大小有 100万,在64位机器上就需要花费大约 800W 字节,即 8MB 内存。这样会消耗掉大量的内存。

意义二:易编码

写了一个函数来实现更新某对象里的一些数据,在值类型的变量中,若不使用指针,则函数需要重新返回一个更新过的全新对象。

而有了指针,则可以不用返回。

全部评论(0)