golang学习笔记7-指针、值类型与引用类型【重难点】

注:本人已有C,C++,Python基础,只写本人认为的重点。
虽然go的指针概念,用法(取地址,解引用)和C/C++一样,但还是有些地方需要牢记而且很重要。
go和C/C++定义指针的语法不同,C/C++的星号在变量类型之后,go的星号在前:var 变量名 *变量类型。
内存通常分为四大块:堆区,栈区,全局区,代码区,这些概念百度了解即可。go中的变量按其内存分配机制,有值类型和引用类型。值类型就是变量直接存储值,在栈中存储,引用类型就是变量存放另一个变量的地址,在堆中存储。当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由go编译器(GC)来回收,这就是go的垃圾回收机制,避免了C/C++中的内存泄漏问题。
注意:这里说的是内存理论,实际上,go对值类型和引用类型的分配比较模糊,有时值类型也会存在堆上,或者引用类型存在栈上。
在go中,值类型和引用类型分别有多种,如下:
六个值类型:整数型,浮点型,bool,字符串,数组,结构体
五个引用类型:指针(pointer),切片(slice),映射(map),管道(channel),接口(interface)

我们都知道C/C++有空指针NULL,但go没有空指针,只有空引用nil,nil的官方解释是:nil is a predeclared identifier representing the zero value for a pointer, channel, func, interface, map, or slice type.
不难发现,nil也可以作为函数的值,那么函数到底是值类型还是引用类型?这个问题其实很复杂,有争议,因为函数的性质比较特殊:你创建函数时,内存存的是值,即代码,调用函数时,用的也是值,但赋值时却用的是函数的引用,所以我个人倾向于函数是值类型,但有引用类型的特点。所以讲值类型和引用类型时,一般不提函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值