精华内容
下载资源
问答
  • 传值调用和引用调用的理解
    千次阅读
    2019-08-13 22:57:38

    传值调用
    实参---->形参(实参传数给形参,形参获得实参的数值),改变形参不改变原先的实参,因为两者在获得值之后没有任何关系。

    引用调用
    实参---->形参(实参传地址给形参,形参获得实参的地址),改变形参会反映在存储单元中,实参会被改变。

    只有实参传值或者地址给形参!
    没有形参穿值或者地址给实参的说法!

    形参没有确定的值,只能是变量。
    实参可以是常量、变量、表达式、函数。
    实参可以是表达式, 但不是“任意”,表达式计算结果的 类型 必须与 形参一致。当然数值不能超界溢出。

    更多相关内容
  • Hereyou will learn about difference between call by value ... 在这里,您将了解C中按值调用和按引用调用之间的区别。 There are two different ways of passing values to functions: call by value and call ...

    c语言 引用调用

    Here you will learn about difference between call by value and call by reference in C.

    在这里,您将了解C中按值调用和按引用调用之间的区别。

    There are two different ways of passing values to functions: call by value and call by reference. They are also called as pass by value and pass by reference.

    将值传递给函数的方式有两种:按值调用和按引用调用。 它们也称为按值传递和按引用传递。

    在C中按值调用 (Call by Value in C)

    In call by value method a copy of actual parameters is passed which is stored in formal parameters.

    在按值调用方法中,传递实际参数的副本,该副本存储在形式参数中。

    Actual Parameters: The parameters that are passed while calling the function are called actual parameters.

    实际参数:调用函数时传递的参数称为实际参数。

    Formal Parameters: The parameters that hold the values of actual parameters are called formal parameters.

    形式参数:保存实际参数值的参数称为形式参数。

    In call by value method, if any changes are done in formal parameters then actual parameters are not changed.

    在按值调用方法中,如果对正式参数进行了任何更改,则实际参数不会更改。

    Let’s take an example of call by value in C language.

    让我们以C语言中的按值调用为例。

    Example:

    例:

    #include<stdio.h>
     
    void fun(int x)
    {
    	x=x+5;
    }
     
    int main()
    {
    	int a=10;
    	printf("Before calling\na=%d",a);
    	fun(a);
    	printf("\n\nAfter calling\na=%d",a);
    	
    	return 0;
    }

    Output:

    输出:

    Call by Value in C

    As you can clearly see in output that after calling the function and doing changes in formal parameter x, the actual parameter a is not changed.

    如您在输出中清楚看到的那样,在调用函数并对形式参数x进行更改之后,实际参数a不会更改。

    在C中通过引用调用 (Call by Reference in C)

    In call by reference method, reference or address of actual parameters is passed which is stored in formal parameters.

    在按引用调用方法中,将传递实际参数的引用或地址,并将其存储在形式参数中。

    If any changes are done in formal parameters then actual parameters are also changed.

    如果对形式参数进行了任何更改,则实际参数也会更改。

    Let’s take an example of call by reference in C language.

    让我们以C语言中的引用调用为例。

    Example:

    例:

    #include<stdio.h>
     
    void fun(int *x)
    {
    	*x=(*x)+5;
    }
     
    int main()
    {
    	int a=10;
    	printf("Before calling\na=%d",a);
    	fun(&a);
    	printf("\n\nAfter calling\na=%d",a);
    	
    	return 0;
    }

    Output:

    输出:

    Call by Reference in C

    You can clearly see in output that after calling the function and doing changes in formal parameter x, the actual parameter a is also changed.

    您可以从输出中清楚地看到,在调用函数并对形式参数x进行更改之后,实际参数a也将更改。

    Difference between Call by Value and Call by Reference in C

    C中按值调用和按引用调用之间的区别 (Difference between Call by Value and Call by Reference in C)

    S. No.Call by ValueCall by Reference
    1.A copy of actual parameters is passed into formal parameters.Reference of actual parameters is passed into formal parameters.
    2.Changes in formal parameters will not result in changes in actual parameters.Changes in formal parameters will result in changes in actual parameters.
    3.Separate memory location is allocated for actual and formal parameters.Same memory location is allocated for actual and formal parameters.
    序号 按价值致电 通过参考电话
    1。 实际参数的副本将传递给形式参数。 实际参数的引用将传递给形式参数。
    2。 形式参数的更改不会导致实际参数的更改。 形式参数的更改将导致实际参数的更改。
    3。 为实际和形式参数分配了单独的存储位置。 相同的内存位置分配给实际参数和形式参数。

    If you have any doubts related to above tutorial then you can ask it by commenting below.

    如果您对以上教程有任何疑问,可以在下面评论中提出。

    翻译自: https://www.thecrazyprogrammer.com/2015/12/difference-between-call-by-value-and-call-by-reference-in-c.html

    c语言 引用调用

    展开全文
  • 调用函数时,有三种向函数传递参数的方式: 调用类型 描述 传值调用 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。 指针调用 该方法把参数的地址...

    如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数
    形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。
    当调用函数时,有三种向函数传递参数的方式:

    调用类型描述
    传值调用该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
    指针调用该方法把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
    引用调用该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

    传值调用

    向函数传递参数的传值调用方法,把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
    默认情况下,C++ 使用传值调用方法来传递参数。一般来说,这意味着函数内的代码不会改变用于调用函数的实际参数。函数 swap() 定义如下:

    // 函数定义
    void swap(int x, int y)
    {
       int temp;
     
       temp = x; /* 保存 x 的值 */
       x = y;    /* 把 y 赋值给 x */
       y = temp; /* 把 x 赋值给 y */
      
       return;
    }
    

    现在,让我们通过传递实际参数来调用函数 swap():

    实例

    #include <iostream>
    using namespace std;
     
    // 函数声明
    void swap(int x, int y);
     
    int main ()
    {
       // 局部变量声明
       int a = 100;
       int b = 200;
     
       cout << "交换前,a 的值:" << a << endl;
       cout << "交换前,b 的值:" << b << endl;
     
       // 调用函数来交换值
       swap(a, b);
     
       cout << "交换后,a 的值:" << a << endl;
       cout << "交换后,b 的值:" << b << endl;
     
       return 0;
    }
    

    当上面的代码被编译和执行时,它会产生下列结果:

    交换前,a 的值: 100
    交换前,b 的值: 200
    交换后,a 的值: 100
    交换后,b 的值: 200
    

    上面的实例表明了,虽然在函数内改变了 a 和 b 的值,但是实际上 a 和 b 的值没有发生变化。

    指针调用

    向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
    按指针传递值,参数指针被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为指针类型,该函数用于交换参数所指向的两个整数变量的值。

    // 函数定义
    void swap(int *x, int *y)
    {
       int temp;
       temp = *x;    /* 保存地址 x 的值 */
       *x = *y;        /* 把 y 赋值给 x */
       *y = temp;    /* 把 x 赋值给 y */
      
       return;
    }
    

    现在,让我们通过指针传值来调用函数 swap():

    #include <iostream>
    using namespace std;
    
    // 函数声明
    void swap(int *x, int *y);
    
    int main ()
    {
       // 局部变量声明
       int a = 100;
       int b = 200;
     
       cout << "交换前,a 的值:" << a << endl;
       cout << "交换前,b 的值:" << b << endl;
    
       /* 调用函数来交换值
        * &a 表示指向 a 的指针,即变量 a 的地址 
        * &b 表示指向 b 的指针,即变量 b 的地址 
        */
       swap(&a, &b);
    
       cout << "交换后,a 的值:" << a << endl;
       cout << "交换后,b 的值:" << b << endl;
     
       return 0;
    }
    

    当上面的代码被编译和执行时,它会产生下列结果:

    交换前,a 的值: 100
    交换前,b 的值: 200
    交换后,a 的值: 200
    交换后,b 的值: 100
    

    引用调用

    向函数传递参数的引用调用方法,把引用的地址复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

    按引用传递值,参数引用被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为引用类型,该函数用于交换参数所指向的两个整数变量的值。

    // 函数定义
    void swap(int &x, int &y)
    {
       int temp;
       temp = x; /* 保存地址 x 的值 */
       x = y;    /* 把 y 赋值给 x */
       y = temp; /* 把 x 赋值给 y  */
      
       return;
    }
    

    现在,让我们通过引用传值来调用函数 swap():

    #include <iostream>
    using namespace std;
    
    // 函数声明
    void swap(int &x, int &y);
    
    int main ()
    {
       // 局部变量声明
       int a = 100;
       int b = 200;
     
       cout << "交换前,a 的值:" << a << endl;
       cout << "交换前,b 的值:" << b << endl;
    
       /* 调用函数来交换值 */
       swap(a, b);
    
       cout << "交换后,a 的值:" << a << endl;
       cout << "交换后,b 的值:" << b << endl;
     
       return 0;
    }
    

    当上面的代码被编译和执行时,它会产生下列结果:

    交换前,a 的值: 100
    交换前,b 的值: 200
    交换后,a 的值: 200
    交换后,b 的值: 100
    
    展开全文
  • 形参&实参,传值调用&引用调用

    千次阅读 多人点赞 2019-03-20 09:11:00
    引用调用传值调用传值调用的定义传值调用的代码实例引用调用引用调用的定义引用调用的代码实例 引言 相信很多C语言初学者都知道形参实参的概念,但在函数调用中,仍然还有很多人会混淆,本文将借助示例代码详细解释...

    引言

    相信很多C语言初学者都知道形参实参的概念,但在函数调用中,仍然还有很多人会混淆,本文将借助示例代码详细解释C语言中形参实参及传值调用和引用调用。

    形参&实参

    函数调用中存在两类参数:形式参数及实际参数,两类参数的功能和使用甚至所占空间都不尽相同。下面本文将解释二者的异同。

    什么是形参

    形式参数(formal parameter),简称形参,是在函数头括号内声明的,某一函数私有的局部变量,。在函数外部中同名变量不会与之冲突。每次调用函数,会对函数头内定义的形参赋值。

    如何声明带形参的函数

    在使用ANSI C形式声明函数原型:

    void function( char a, int b);
    

    当函数接受参数时,函数原型用逗号分隔的列表指明参数的数量和类型。

    什么是实参

    实际参数(actual argument),简称实参,它是**主调函数(calling function)赋给被调函数(called function)**的具体值。它可以是常量,变量,正确的表达式,甚至是函数。但无论如何实参必须有一个具体的值以供拷贝于形参之中。

    二者关系

    简而言之,形参实际上是一种“空白”或是一种“占位符”,在函数调用的过程中,我们在某一已定义的函数中的括号内使用实参,此后函数将会拷贝实参至函数体内“填充”形参,并在函数体内得到使用。
    至于怎样使用,本文将在后续段落进行详细描述。

    传值调用&引用调用

    实参的传递过程有两种不同的机制,其分别是传值调用和引用调用。

    传值调用

    传值调用的定义

    在传值调用过程中,形参是一个局部变量,其初值为调用函数是括号内赋予的实参的值。其只是使用了实参的值,在程序运行时,其在函数体内占用另外的内存空间,不对实参造成影响。

    传值调用的代码实例

    #include<stdio.h>
    int fun1(int a,int b){
    	a=2;
    	b=2;
    }
    int main(){
    	int i=0;
    	int j=0;
    	printf("before change:\ni=%d,j=%d\n",i,j);
    	fun1(i,j);
    	printf("after change:\ni=%d,j=%d\n",i,j);   
    	}
    

    其运行结果如下:

    我们发现,果然,传值调用中对形参的操作不会对实参造成影响。

    引用调用

    引用调用的定义

    在引用调用过程中,形参传递的不再只是一个值或是一个简单的结果,而是传递实参的地址。虽然形参仍然是一个占位符或是一个空白,但将实参拷贝到形参上后,它不再如传值调用一样占用额外的内存空间,而是和实参占用同一个内存空间。发生在形参上的任何改变都将与此同时体现在实参上。

    引用调用的代码实例

    实例1:

     #include<stdio.h>
     int fun3(int *a,int *b){
    	int m,*c;
    	m=0;
    	c=&m;
    	*c=*a;
    	*a=*b;
    	*b=*c;
    }
     int main(){
    	int *p,*q,s,t;
    	s=11;
    	t=24;
    	p=&s;
    	q=&t;
    	printf("before change:\ns=%d,t=%d\n",*p,*q);
    	fun3(p,q);
    	printf("after change:\ns=%d,t=%d\n",*p,*q); 
    } 
    

    其运行结果如下:
    在这里插入图片描述
    在此例中,我们调用函数时代入的实参分别是s和t的地址,因此发生引用调用,在函数中对s和t进行交换后,实参s和t的值同时也被交换。
    实例2:

    #include<stdio.h>
    #define N 4
    int fun3(int *a){
    	int i;
    	for (i=0;i<N;i++){
    		a[i]=0;
    	}
    }
    int main(){   
    	int i;  
    	int m[]={1,2,3,4};
    	printf("before change:\nm[4]=");
    	for (i=0;i<N;i++){
    		printf("%d ",m[i]);   
    		}
    		printf("\n");
    	fun3(m); 							/*此时的m是一个数组名,同时也是数组m第一个值m[0]的地址,此时发生引用调用*/ 
    	printf("after change:\nm[4]=");                
    	for (i=0;i<N;i++){
    		printf("%d ",m[i]);   
    		}
    	printf("\n");
    	} 
    

    其运行结果如下:
    在这里插入图片描述
    我们可以清晰地看见实参数组m的值在函数内部发生了变化。

    展开全文
  • 大多处刚接触程序的小伙伴在学习C/C++的过程中都会遇到函数传值调用,传址调用和传引用的概念,刚开始接触时肯定一时无法理解三者的区别和联系,可能有一部分小伙伴可能学了很长接触很长时间也一直对三者的概念有...
  • 引用调用与传值调用

    千次阅读 多人点赞 2017-10-26 12:20:01
    以下关于传值调用与传引用调用的叙述中,正确得是()。 ① 在传值调用方式下,可以实现形参和实参间双向传递数据的效果 ② 在传值调用方式下,实参可以是变量,也可以是常量和表达式 ③ 在引用调用方式下,...
  • 除了四类八种基本类型外,所有的类型都称为引用类型(如:数组,类,接口,字符串) 值传递 基本数据类型赋值都属于值传递; 值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形...
  • 相关的基本概念: ... 传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。 基本数据类型:有八种 整数类...
  • C语言函数调用三种方式:传值调用,引用调用和传地址调用
  • 有些程序员,认为java对对象采用的是引用调用,实际上这种理解是不对的!!!       举例代码: 先写一个People类 package diaoYong; class People { private String name; public People(String str...
  • 理解C++传值、传址、引用调用

    千次阅读 2019-03-30 14:13:33
    以前只了解传值、传址、引用调用的区别,没有深入了解,今天稍微总结一下,今后慢慢深入。 1.传值调用 在传值调用时,实参被拷贝了一份,然后在函数体内使用,函数体内修改参数变量时修改的只是实参的一份拷贝,而...
  • 近期在项目中遇到一个场景,在多层级调用中需要传递上下文,调用过程中上线文对象可能为空,想通过一个公共方法处理上下文,当上下文为空时生成上下文对象,执行相关操作后将该上下文对象向后传递。大致逻辑如下: ...
  • 引用调用 (c/c++)

    千次阅读 2018-10-10 12:46:07
    引用,是C++中提出来的一种新的使用变量的方式,即,给实际变量起个别名,通过这个别名来引用实际的变量。标准C中不支持变量的引用。只不过有这种方法。 #include <stdlib.h> #include <stdio.h> void...
  • 传地址调用和传引用调用的区别

    千次阅读 2017-09-05 21:13:17
    传地址调用和传引用调用的区别相同点: 传引用和传地址,原理上都是将参数变量的地址传递给被调函数。所以在函数内部修改参数的值时,均可返回修改之后的结果给调用者。 不同点: 引用一定会指向一个对象,而指针...
  • Java--按值调用和按引用调用

    千次阅读 多人点赞 2018-07-16 20:10:45
     按引用调用:表示方法接收的时调用者提供的变量地址  在Java中总是采用按值调用,方法得到的参数值是一个拷贝。 二、实例演示  (1) 在 Java 中,八种基本数据类型和String类型,在方法中不能直接对类中使用该...
  • 引用调用 该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 默认情况下,C++ 使用 传值调用 来传递参数。一般来说,这意味着函数内的...
  • C++——传引用调用

    千次阅读 2017-05-10 00:21:37
    引用调用是什么?看下面效果就知道!普通函数调用#include using namespace std;void Test_Calculate(int data);int main() { int a = 5; Test_Calculate(a); cout ; return 0; }void Test_Calculate
  • 函数的传值调用和传址调用在C和C++中都是合法的语法,但是引用调用就只是在C++中合法的。1.传值调用:程序:#includevoid swap(int x, int y){ int tmp = x; x = y; y = tmp;}int main(void){ int a = 1, b = 2; ...
  • 多态 父类的引用可以调用子类中重写的父类的方法,但不能调用子类中独有的方法,即不能调用父类中不存在,子类中存在的方法。
  • 在程序设计语言中,将参数传递分为按值调用和按引用调用。按值调用:表示方法接收的是调用者提供的值。而按引用调用表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递...
  • 父类引用调用子类对象

    千次阅读 2017-12-07 09:30:03
    对象从自己的动态存储区调用属性,从静态存储区调用方法。 对象调用方法的方式---“映射”:方法名----->对应的类的静态存储区---->方法 子类对象调用父类继承来的方法(未重写),从父类的静态存储区调用父类的...
  • 引用调用和异步调用是 运行到 打开VI引用的时候才把 VI加载到内存, 引用调用的异步调用区别 引用 LabVIEW官方的一句话 如通过子VI节点或通过引用调用节点以标准调用方法调用一个VI,数据
  • C++传值调用与引用调用的区别

    千次阅读 2014-03-15 23:43:48
    简单来说,传值调用就是指当一个... 引用调用过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被掉函数对形参的任何操作都被处理成间接寻址
  • 传址调用和引用调用的区别

    千次阅读 2014-03-09 10:13:43
    一直以来对传址调用和引用调用都有些分不清楚,虽然给这两者的区别加一大堆区别。 #include "stdafx.h" #include void funptr(int* ptr) { *ptr=123; } void funcref(int &ref) { ref=234; } __...
  • 方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) 。江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用。这其实很不...
  • 传值引用调用引用的区别

    千次阅读 2019-06-22 03:34:35
    传值引用一般就是生成一个临时对象,而引用调用是调用参数本身。 参照下面C语言代码理解: 在 test.h文件里实现两个方法  #include <stdio.h> /*交换两个数*/ void exchange(int x,int y){ int ...
  • 我想,你只要看了C语言上关于传值函数调用的测试题,一切都会了然于胸:1. 考题一:程序代码如下:void Exchg1(int x, int y) {int tmp;tmp=x;x=y;y=tmp;printf(“x=%d,y=%d/n”,x,y)}void main(){int a=4,b=6;...
  • c语言传值调用与引用调用

    千次阅读 2018-04-09 15:01:16
    转载自 https://blog.csdn.net/ly0303521/article/details/44310125...2、引用调用 把实参(int a)的地址(&amp;a)赋给形参(指针变量,比如*b,这时b=&amp;a,即b指向变量a),如果*b(也即a对应的内存空间)发生...
  • 引用调用形参

    千次阅读 2016-09-25 15:41:54
    一是传值调用机制,二是用于替换形参的传引用调用机制,下面主要针对传应用调用机制进行简单的阐述。  1. 区别:  传值调用机制是将实参中的值传递给函数的形参,并不会将实参这个变量传入; 传引用调用机制是用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,122,425
精华内容 848,970
关键字:

引用调用