一、两种传递参数的方式
-
值传递
-
引用传递
二、传参本质
-
不管是值传递还是引用传递,传递给函数的都是变量的副本。
-
不同的是,值传递的是值的拷贝,而引用传递的是引用的拷贝(即内存地址的拷贝)。
-
一般来说,地址的拷贝效率更高,因为不需要复制整个数据结构,但需要注意的是,修改引用传递的参数会影响到原始数据。
-
如果希望函数内的变量可以改变其外部值,可以通过指针的方式传递参数,即传递值的地址,让函数通过地址访问和修改原始数据。
三、值类型和引用类型
-
值类型:基本数据类型(如 int、float、bool、string)和结构体(struct)。值类型在传递时会复制整个数据。
-
引用类型:切片(slice)、映射(map)、通道(channel)、接口(interface)和函数(function)。引用类型在传递时会复制引用
四、值传递和引用传递的特点
-
值类型默认是值传递,变量直接存储值,内存通常分配在栈上,传递时复制整个值,修改副本不影响原始数据。
-
引用类型默认是引用传递,变量存储的是数据的地址,内存通常分配在堆上,传递时复制引用(地址),修改副本会影响原始数据。
-
如果没有变量引用 引用类型的地址,那么这个地址所对应的数据空间会成为一个垃圾,被 GC 回收