精华内容
下载资源
问答
  • 传值调用和引用调用
    2021-04-14 19:53:13

    (1)传值调用。在传值调用时,过程的形式参数取得的是实在参数的值。在这种情况下,形式参数实际上是过程中的局部量,其值的改变不会导致调用点所传送的实在参数的值发生改变,也就是说数据的传送是单向的,只往下传,不能回传结果。在C语言中只有按值调用的过程参数传递方式。

    (2)引用调用。在引用调用时,过程的形式参数取到的是实在参数所在单元的地址。在过程中,对该形式参数的引用相当于对实在参数所在的存储单元的地址引用。任何改变形式参数值的操作会反映在该存储单元中,也就是反映在实在参数中,因此数据的传 送是双向的。C+ +语言既支持按值调用,也支持按引用调用。

    更多相关内容
  • 传值调用和引用调用的理解

    千次阅读 2019-08-13 22:57:38
    传值调用 实参---->形参(实参传数给形参,形参获得实参的数值),改变形参不改变原先的实参,因为两者在获得值之后没有任何关系。 引用调用 实参---->形参(实参传地址给形参,形参获得实参的地址),改变形...

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

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

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

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

    展开全文
  • /*** 传值调用和引用调用*/public class InvokeTest {public static void main(String[] args) {// 传值调用int i = 99999;plus(i);System.out.println("传值调用结果: " + i);// 包装类型Integer I = new Intege.....

    package com.what21.base04;

    /**

    * 传值调用和引用调用

    */

    public class InvokeTest {

    public static void main(String[] args) {

    // 传值调用

    int i = 99999;

    plus(i);

    System.out.println("传值调用结果: " + i);

    // 包装类型

    Integer I = new Integer(99999);

    plus(I);

    System.out.println("传值调用结果: " + I);

    // 字符串类型

    String str = "aaa";

    plus(str);

    System.out.println("传值调用结果: " + str);

    // 引用调用

    ObjPlus o = new ObjPlus();

    o.i = 99999;

    o.I = 99999;

    o.str = "aaa";

    plus(o);

    System.out.println("引用调用结果: " + o.i);

    System.out.println("引用调用结果: " + o.I);

    System.out.println("引用调用结果: " + o.str);

    }

    /**

    * @param i

    */

    public static void plus(int i){

    i = i + i;

    }

    /**

    * @param i

    */

    public static void plus(Integer I){

    I = I + I;

    }

    /**

    * @param str

    */

    public static void plus(String str){

    str = str + str;

    }

    /**

    * @param o

    */

    private static void plus(ObjPlus o) {

    o.i = o.i + o.i;

    o.I = o.I + o.I;

    o.str = o.str + o.str;

    }

    }

    class ObjPlus{

    public int i;

    public Integer I;

    public String str;

    }

    展开全文
  • 在使用一个音频芯片时,需要用到这样一个功能,即对音量进行调节。在厂家提供的驱动里面没有这样的功能函数,因此需要自行添加...因此实现音量调节的思路就有了:把当前vol的值相应的增加或者减少,然后再调用Vol_Cm...

    在使用一个音频芯片时,需要用到这样一个功能,即对音量进行调节。在厂家提供的驱动里面没有这样的功能函数,因此需要自行添加。注意到厂家提供的驱动里面包含了一个写入命令的函数,void Vol_Cmd(uint 8 vol), 其中vol是音量的数值,范围为0~255,这个函数的作用就是通过写入vol的值来改变音量。

    因此实现音量调节的思路就有了:

    把当前vol的值相应的增加或者减少,然后再调用Vol_Cmd()函数把它写入到芯片中,就实现了音量的增减。很简单吧。但是有一个问题,那就是要注意到Vol_Cmd()函数是没有返回值的,那么vol的值怎么样才能更新呢?也就是说,怎样才能获得vol的当前值呢?

    我最开始的想法是构造这样两个函数(以音量增加为例,音量减少类似):

    uint8 Vol_Inc(uint8 vol)

    { if(vol<=0xf0)

    vol+=0x0f;          //以15作为增量,从音量最小到最大一共有16档

    Vol_Cmd(vol);

    return vol;

    }

    很明显,我的想法是在 Vol_Inc()函数中做两件事,一件事是把vol的值增加之后写入到芯片中,实现音量的增加,另一件事是把增加后的值返回,以便下次调用Vol_Inc()函数的时候vol的值已经更新。那么调用这个函数就必须遵循这样的格式:

    uint8 vol="120";          // 初始化为一个中间值

    vol=Vol_Inc(vol);

    当然这样是没有错误的,不过在板子上调试的时候却发现一个问题,那就是调用Vol_Inc()函数的次数不能连续超过六次,否则音量就变为0。Debug的时候单步跑到Vol_Inc()函数的时候就warning,然后error。研究了很长时间都没有解决这个问题。

    同project leader沟通之后,他表示音量调节只需要5档就够了,但是最好还是要保持程序的flexibility。只需要5档?我把增量的值改为0x32之后放到板子上跑,这下就一切正常了,音量加减都没有问题。

    问题看似解决了,但是我还是觉得不舒服。vol=Vol_Inc(vol);这个调用看来起很不舒服。抛开这个具体的问题,我想了一下函数调用的问题。想到指针的时候,我发现自己犯傻了。

    C语言的函数调用采用的是传值调用,也就是说调用函数之后并不改变传递的原始参数的值,传递给子函数的只是一个副本,下面举例说明:

    #include "stdio.h"

    #include "stdlib.h"

    void Vol_Inc(int p);

    main()

    { int vol="100";

    Vol_Inc(vol);

    printf("vol=%d\n",vol);

    system("pause");

    }

    void Vol_Inc(int p)

    { p+=15;

    }

    很明显,输出为vol=100;因为main在调用Vol_Inc()的时候只是把vol=100的一个副本传递给Vol_Inc(),调用之后vol的原本没有变,因此vol值并不会改变。但是这个音量加减程序要改变原本的值,怎么办? 很简单,用指针。与传值调用相对应的是引用调用(call by reference),C语言并不支持,只能通过使用指针参数来模仿。

    #include "stdio.h"

    #include "stdlib.h"

    void Vol_Inc(int *p);

    main()

    { int vol="100";

    Vol_Inc(&vol);

    printf("vol=%d\n",vol);

    system("pause");

    }

    void Vol_Inc(int *p)

    { *p+=15;

    }

    这下输出就是vol=115了,也就是说我的目的达到了。按照这个思路修改了一下音量增减的函数,放在板子上运行,完全正常。难道以前的vol=Vol_Inc(vol)调用有问题?我怀疑是。不管了,我也没有精力去深究了,反正这个问题已经解决了。

    经验教训:

    这个问题是一个初级得不能再初级的C语言问题,自己怎么就在开始走了弯路呢。埋头做项目的时候,思路太窄,不能把以往学习的知识很好的应用起来。前天一个师兄在QQ群里也说道,大家都在做项目,几乎都没有怎么静下心看书,其实书上很多的地方都写得很清楚了……

    *博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

    展开全文
  • 根据上述两种情况即为传值调用和引用调用。 接下来我们看另一种情况 int n=5; int *b=&n; printf("n=%d\n",n); printf("b=%d\n",b); printf("n地址=%d\n",&n); printf("b指向地址的内容=%d\n",*b); 结果 n=5 b=...
  • 传值调用传值调用中传递的参数为基本数据类型,参数视为形参。 传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上...
  • 如果希望函数能够改变某变量的值,那么相应的形参一定要是引用调用参数。因此必须在参数类型后面加上“&”符号。传值调用形参只是一个局部变量。当一组数据需要多个函数处理时候,也要用引用调用。  到目前为止...
  • C语言函数调用三种方式:传值调用引用调用和传地址调用
  • 传值引用和调用引用的区别

    千次阅读 2019-06-22 03:34:35
    传值引用一般就是生成一个临时对象,而引用调用是调用参数本身。 参照下面C语言代码理解: 在 test.h文件里实现两个方法  #include <stdio.h> /*交换两个数*/ void exchange(int x,int y){ int ...
  • 传值调用引用调用

    千次阅读 2014-05-23 14:35:14
    C++的两种调用方式:传值调用和引用调用 一、函数的参数传递及传值调用   函数名(参数表) 将实参的值按位置传递给对应的形参变量 1、形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能...
  • C语言函数调用三种方式 传值调用引用调用和传地址调
  • 传值调用引用调用.cs
  • 有了这个,调用Exchg3时函数会将a,b 分别代替了x,y了,我们称x,y分别引用了a,b变量。这样函数里头操作的其实就是实参a,b本身了,也就是说函数里是可以直接修改到a,b的值了。 最后对值传递与引用传递作一个比较: ...
  • 大多处刚接触程序的小伙伴在学习C/C++的过程中都会遇到函数传值调用,传址调用和引用的概念,刚开始接触时肯定一时无法理解三者的区别和联系,可能有一部分小伙伴可能学了很长接触很长时间也一直对三者的概念有...
  • C语言函数调用三种方式传值调用,引用调用和传地址调[归类].pdf
  • 传共享调用和引用调用的不同之处是,该求值策略传递给函数的参数是对象的引用的拷贝,即对象变量指针的拷贝。 也就是说, a b c 三个变量的值是 num obj1 obj2 的指针的拷贝。 a b c 的值分别与 num obj1 obj2 ...
  • 近期在项目中遇到一个场景,在多层级调用中需要传递上下文,调用过程中上线文对象可能为空,想通过一个公共方法处理上下文,当上下文为空时生成上下文对象,执行相关操作后将该上下文对象向后传递。大致逻辑如下: ...
  • 按照参数形式的不同,C++应该有三种函数调用方式:传值调用引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值...
  • C++传值调用引用调用的区别

    千次阅读 2014-03-15 23:43:48
    简单来说,传值调用就是指当一个函数被调用时,C++根据实参形参的对应关系将实参的值一一复制给形参,即实参的值单向传递给形参。函数本身不对实参进行任何操作,即使形参的值在函数中改变,实参的值也不会受到...
  • 1,名词解析 (1)形参:形参出现函数定义中,在整个函数体内都可以使用,离开函数则不能使用。...(1)形参变量只有在被调用时才分配内存单元,在调用结束后,立即释放所分配的内存单元。因此...
  • 传值调用和传址调用
  • 传值调用和传值调用的区别(附例子) 来源:信奥一本通-函数
  • 今天来谈一谈C语言中传值调用和传址调用的区别。 接下来用一个题目来展开讨论,题目是:写一个函数可以交换两个整形变量的内容。 假设现在有两个变量一个是a,一个是b,现在要交换这两个变量的值,首先我们写出...
  • 传值调用,传名调用,引用调用,复制恢复例11 传值调用2 引用调用 ——传地址引用3 复制恢复4 传名调用例2 例1 程序运行时的存储空间组织如图7-1所示。 其中代码区用于存放目标程序代码﹐静态数据区用来存放编译时就...
  • 1、C++ 引用调用 引用可以看成是一种特殊类型的变量可以被认为是另一个变量的别名,就好比人的绰号一样,虽然名字不同, 但所指向的人是一样的,所以引用还与指针有类似的地方,修改形式参数会影响实际参数。 int &...
  • in.ref.out C#传值调用引用调用
  • 形参&实参,传值调用&引用调用

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,836
精华内容 27,134
关键字:

传值调用和引用调用