值传递和引用传递
概念说明
Go 的函数参数传递本质上都是“值拷贝”。
当参数类型是普通值(如 int)时,函数里改的是副本。
当参数类型是指针(如 *int)时,拷贝的是地址值,但可以通过该地址修改原变量。
语法/规则
- 普通值参数不会直接影响外部变量。
- 指针参数可通过
*指针修改外部变量。 - 调用指针参数函数时,通常要传
&变量。 - 理解“拷贝值”与“能否改到原数据”是区分这两种写法的关键。
对比示例
| |
输出结果:
| |
常见错误
- 误以为普通值参数在函数内修改后会自动影响外部变量。
- 调用指针参数函数时忘记传
&,导致类型不匹配。 - 对
nil指针解引用(*p)会触发运行时 panic。