按值调用(call by value)和通过引用调用(call by reference)的区别

许多编程语言都使用函数。函数是执行特定任务的一组语句。主代码可以分为几个函数并调用它们。调用函数有两种方法,如按值调用和按引用调用。在按值调用方法中,变量的副本被传递到函数中。如果函数的值发生更改,则不会更改原始值。在引用调用中,函数内部变量的更改反映原始值。按值调用和按引用调用的关键区别在于,在按值调用中,变量的副本传递给函数,而在按引用调用中,变量的地址传递给函数。本文讨论了按值调用和按引用调...

关键区别——按值调用与按引用调用

许多编程语言都使用函数。函数是执行特定任务的一组语句。主代码可以分为几个函数并调用它们。调用函数有两种方法,如按值调用和按引用调用。在按值调用方法中,变量的副本被传递到函数中。如果函数的值发生更改,则不会更改原始值。在引用调用中,函数内部变量的更改反映原始值。按值调用和按引用调用的关键区别在于,在按值调用中,变量的副本传递给函数,而在按引用调用中,变量的地址传递给函数。本文讨论了按值调用和按引用调用的区别。

目录

1. 概述和主要区别
2. 什么是按价值调用
3. 什么是参照调用
4. 值调用和引用调用的相似性
5. 并列比较-以表格形式按值调用与按引用调用
6. 摘要

什么是按值调用(call by value)?

在按值调用中,变量的副本传递给函数。函数可以更改复制的值,但不会更改原始值。通过交换两个数字的程序可以很容易地理解这个概念。参考下面用代码块环境编写的C程序。

按值调用(call by value)和通过引用调用(call by reference)的区别

图01:交换两个数字的程序

根据下面给出的程序,变量“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分。使用交换函数所做的更改不会反映在主程序中。

按值调用(call by value)和通过引用调用(call by reference)的区别

图02:交换程序的输出

swap函数中的“x”和“y”具有交换的值,即30和20,但这些值不能在主程序中使用。即使“x”和“y”有交换的值,它们也是交换函数的局部变量,主函数无法访问它们。为了避免这个问题,可以使用引用调用。

什么是通过引用调用(call by reference)?

在这个方法中,变量的地址被发送到函数。参考下面用代码块环境编写的C程序。

按值调用(call by value)和通过引用调用(call by reference)的区别

图03:使用指针交换两个数字

根据下面的给定示例,“a”的值为20,“b”的值为30。程序员可以使用swap(&a,&b)函数发送“a”和“b”的地址,而不是传递“a”和“b”的副本。

按值调用(call by value)和通过引用调用(call by reference)的区别

图04:使用指针的交换程序的输出

在交换中,函数应该使用指针,因为地址是传递的,这些地址应该由指针保存。在函数内部,“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版本的按值调用和按引用调用的区别

引用

  • 发表于 2020-10-20 00:32
  • 阅读 ( 497 )
  • 分类:IT

你可能感兴趣的文章

外面的(out)和参考c#(ref in c#)的区别

...数。它们是有值参数、输出参数和参考参数。值参数用于按值将参数传递到方法中。引用参数用于通过引用将参数传递给方法。输出参数用于将结果从方法返回。在C#中,out关键字用于输出参数,ref关键字用于引用参数。C中out和...

  • 发布于 2020-10-18 20:42
  • 阅读 ( 236 )

系统调用(system call)和图书馆呼叫(library call)的区别

关键区别-系统调用与库调用 系统调用和库调用与计算机的操作系统有关。计算机可以在两种模式下运行,即用户模式和内核模式。系统调用和库调用的关键区别在于,系统调用是内核提供的进入内核模式访问硬件资源的函数...

  • 发布于 2020-10-20 00:18
  • 阅读 ( 576 )

阿贾克斯(ajax)和jquery公司(jquery)的区别

...pt代码简化为一行代码。jQuery封装并简化了非常复杂的Ajax调用和DOM。jQuery的部分功能实现了一个高级接口来处理AJAX请求。jQuery检测用户的操作并相应地修改web页面上的元素。jQuery在前端动态地执行所有工作。因此,无论何时需...

  • 发布于 2020-10-27 15:54
  • 阅读 ( 220 )

bdc公司(bdc)和调用事务(call transaction)的区别

BDC与Â 调用事务 BDC或批处理数据通信和调用事务是接口技术的两种方式。在BDC和call事务之间可能会遇到许多不同之处。 在比较两者时,批处理数据通信是最古老的接口技术。BDC接口最重要的方面是异步处理。这意味着它用于多...

  • 发布于 2021-06-23 07:06
  • 阅读 ( 148 )

差分放大器(differential amplifier)和运算放大器(operational amplifier)的区别

...出阻抗取为0。通常,运算放大器利用电阻提供负反馈。通过改变电阻值,可以改变运算放大器的增益。注意,增加一个电阻器会降低运算放大器的总增益。在上一节计算增益时,我们假设没有反馈。因此,我们计算的增益是放...

  • 发布于 2021-06-27 08:19
  • 阅读 ( 427 )

援引(invoke)和唤起(evoke)的区别

主要差异调用(main difference invoke) vs. 唤起(evoke) 虽然调用和调用声音看起来很相似,但是调用和调用之间有细微的区别。召唤的意思是请求支持或援助,而召唤的意思是召唤或召唤。这是invoke和evoke之间的主要区别。我们...

  • 发布于 2021-06-27 13:45
  • 阅读 ( 649 )

应用程序编程接口(api)和系统调用(system call)的区别

API和系统调用的主要区别在于,API是一组协议、例程和函数,允许在各种应用程序和设备之间交换数据,而系统调用是一种方法,允许程序从内核请求服务。 API由协议和函数组成,这些协议和函数定义了不同组件之间的通信方...

  • 发布于 2021-07-01 06:58
  • 阅读 ( 453 )

传递值(pass by value)和通过引用传递(pass by reference)的区别

...在这种情况下,调用函数有两种方法。它们是通过使用“按值传递”或“按引用传递”来实现的。 覆盖的关键领域 1.什么是传递值-定义,功能2.什么是传递引用-定义,功能3.传递值和传递引用之间的区别是什么-关键区别的比较 ...

  • 发布于 2021-07-01 08:19
  • 阅读 ( 475 )

按值调用(call by value)和按地址呼叫(call by address)的区别

按值调用和按地址调用的主要区别在于,在按值调用中,实际参数的值复制到函数的形式参数,而在按地址调用中,实际参数的地址复制到函数的形式参数。 函数是一组语句,可以多次执行某个任务。我们可以将程序分成几个...

  • 发布于 2021-07-01 10:09
  • 阅读 ( 195 )

同步(synchronous)和java中的异步调用(asynchronous calls in java)的区别

Java中同步调用和异步调用的主要区别在于,在同步调用中,代码执行在继续之前等待事件,而异步调用不会阻止程序执行代码。 程序员可以将回调函数作为参数传递给另一个函数。它是在事件之后执行的。当我们需要在点击按...

  • 发布于 2021-07-01 14:57
  • 阅读 ( 831 )
落yu离殇
落yu离殇

0 篇文章

相关推荐