知识卡片

按值传递与按引用传递的语义差异

专业/工作 · 1290.c

内容

函数接收参数有两种根本不同的方式:按值传递会复制一份实参的数据交给函数,函数对这份副本做任何修改都不会影响调用方原始的数据,这天然保护了调用环境不被设计不当的函数意外破坏,代价是数据量大时复制开销高;按引用传递则直接把实参所在的存储地址告诉函数,函数因此能直接读写调用方的原始数据,适合那些本来就是为了修改数据而存在的函数(如排序函数就是要真正改变原列表,而不是排序一份用完就扔的副本)。发散:选按值还是按引用,本质上是在问”调用这个函数的意图是获取一个衍生结果,还是就是要修改这份数据本身”——如果连这一点都没想清楚就选择传递方式,很容易写出”函数明明改了参数,调用方却毫无察觉”或者”函数本想只读、却意外污染了调用方数据”这类隐蔽的 bug。

参考来源

《计算机科学概论》第6章《程序设计语言》