go 中的值类型和引用类型

所有像int, float, string, bool 这些基本类型都是属于值类型,使用时是直接指向内存中的值

go 中的值类型和引用类型

当使用 = 将一个变量赋值给一个变量时,比如a = b ,这种就是引用类型,实际上是将内存中b的值进行的拷贝,将a的值引用给了b一份

go 中的值类型和引用类型
使用&i可以获取变量的内存地址,列如: 0xf840000040 16进制方式。值类型的变量的值存储在栈(系统自动释放)中。

内存地址会根据机器的不同而不同,甚至相同的程序在不同的机器中运行也会有不同的结果,因为每一台机器都有不同的存储器布局,并且位置分配也可能不同。

更复杂的数据通常会需要使用更多的字,这些数据一般使用引用类型保存。

一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。

go 中的值类型和引用类型

这个内存地址一般称为指针 ,这个指针实际也被存在另外的某一个字中。

同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率最高的一种存储形式;也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址。

当使用赋值语句 r2 = r1 时,只有引用(地址)被复制。如果 r1 的值被改变了,那么这个值的所有引用都会指向被修改后的内容,在这个例子中,r2 也会受到影响。