关键区别——按值调用与按引用调用
许多编程语言都使用函数。函数是执行特定任务的一组语句。主代码可以分为几个函数并调用它们。调用函数有两种方法,如按值调用和按引用调用。在按值调用方法中,变量的副本被传递到函数中。如果函数的值发生更改,则不会更改原始值。在引用调用中,函数内部变量的更改反映原始值。按值调用和按引用调用的关键区别在于,在按值调用中,变量的副本传递给函数,而在按引用调用中,变量的地址传递给函数。本文讨论了按值调用和按引用调用的区别。
目录
1. 概述和主要区别
2. 什么是按价值调用
3. 什么是参照调用
4. 值调用和引用调用的相似性
5. 并列比较-以表格形式按值调用与按引用调用
6. 摘要
什么是按值调用(call by value)?
在按值调用中,变量的副本传递给函数。函数可以更改复制的值,但不会更改原始值。通过交换两个数字的程序可以很容易地理解这个概念。参考下面用代码块环境编写的C程序。
根据下面给出的程序,变量“a”的值为20,变量“b”的值为30。调用swap(a,b)函数时,将这两个值传递给swap函数。在swap函数中,“a”被复制到“x”中,“b”被复制到“y”中。现在,'x'的值是20,'y'的值是30。使用temp变量交换两个值。当在交换函数中打印“x”和“y”的值时,输出将为“x”提供30,为“y”提供20。交换函数执行完毕后,控件返回主函数。在main函数中打印“a”和“b”的值时,结果将是原始值。a的20分,b的30分。使用交换函数所做的更改不会反映在主程序中。
swap函数中的“x”和“y”具有交换的值,即30和20,但这些值不能在主程序中使用。即使“x”和“y”有交换的值,它们也是交换函数的局部变量,主函数无法访问它们。为了避免这个问题,可以使用引用调用。
什么是通过引用调用(call by reference)?
在这个方法中,变量的地址被发送到函数。参考下面用代码块环境编写的C程序。
根据下面的给定示例,“a”的值为20,“b”的值为30。程序员可以使用swap(&a,&b)函数发送“a”和“b”的地址,而不是传递“a”和“b”的副本。
在交换中,函数应该使用指针,因为地址是传递的,这些地址应该由指针保存。在函数内部,“a”的地址被复制到“x”,地址“b”被复制到“y”。使用temp变量,“x”和“y”值交换。在这个引用方法的调用中,swap函数内部的更改反映在主程序中。在main中打印'a'和'b'的值将得到交换的值。现在“a”的输出是30,“b”的输出是20。当函数获取变量的地址时,函数内部所做的更改会影响原始值。
什么是值调用与引用调用的相似性(the similarity between call by value and call by reference)?
- 这两个方法用于调用函数/方法。
按值调用(call by value)和通过引用调用(call by reference)的区别
按值调用与按引用调用 | |
在按值调用中,变量的副本被传递到函数中,因此在函数内部所做的更改不会修改原始值。 | 在按引用调用中,变量的地址传递给函数,因此对函数内部变量所做的更改将修改原始值。 |
价值修正 | |
在按值调用时,原始值不变。 | 在按引用调用中,原始值正在更改。 |
总结 - 按值调用(call by value) vs. 通过引用调用(call by reference)
按值调用和按引用调用是调用函数的方法。按值调用和按引用调用的区别在于,在按值调用中,变量的副本传递给函数,而在按引用调用中,变量的地址传递给函数。使用按值调用或按引用调用取决于要执行的任务。
下载按值调用vs按引用调用的pdf版本
你可以下载这篇文章的PDF版本,并按照引文说明离线使用。请在这里下载PDF版本的按值调用和按引用调用的区别