谁能帮我解释一下如何在 C 中传递引用值

发布于 科技 2024-08-20
8个回答
  1. 匿名用户2024-02-01

    看到有几条线**,却不告诉我们是哪条线**,吊着别人的胃口不好。

  2. 匿名用户2024-01-31

    在C中,没有一般的参考概念,这是C++的概念。

    在 C++ 的函数参数中,有两种形式,其中:

    typevar,称为引用方法;

    typevar,称为传递。

    两者之间的区别在于,当传递引用时,实际传递给函数的表单参数是对实际参数的引用,而不仅仅是传递给函数的值。 具体性能如下:

    传递引用时,参数和参数是相同的变量,即它们使用相同的内存空间并具有相同的地址。 传输值时,两者的地址不同;

    传递引用时,没有新变量,因此没有类对象参数的构造和销毁。 如果是值传递调用,调用时会构造,退出函数时会解构。

    由于引用使用的是原始参数的地址,因此引用参数值的修改会在退出函数被埋没后反映在大键函数中,而传递值调用对参数的修改不会影响大键功能。

  3. 匿名用户2024-01-30

    1. 传递变量参数。

    在传统 C 语言中,函数的参数在调用函数时由值传递,这意味着函数参数不具备返回值的能力。

    所以在传统的C语言中,如果你需要一个函数的参数来具有返回一个值的能力,它通常是通过指针来实现的。 例如,实现。

    用于两个整数变量值交换的 C 程序如下:void swapint(int *a, int *b) 使用引用机制后,上述程序的 C++ 版本是调用函数的 C++ 方法:swapint(x,y); C++ 自动将 x 和 y 的地址作为参数传递给 Swapint 函数。

    2. 将大型对象传递给函数。

    当一个大型对象传递给函数时,可以使用引用参数来使参数传递更有效,因为引用不会生成对象。

    复制,即当参数被传递时,不需要复制对象。 下面的示例定义一个具有有限整数集的类:const maxcard=100; class set 构造函数 friend setoperator *(set,set); 重载运算符符号 *,用于计算集合的交集,使用对象作为值传递参数 friendsetoperator*(set&,set&) 重载运算符符号 *,用于计算集合的交集,并使用对象的引用作为值传递参数。

    首先,考虑集合交集的实现 setoperator *(set set1,set set2)returnres; 由于重载运算符不能单独对指针进行操作,因此我们必须将运算声明为集合类型而不是集合 *

    每次使用 * 进行交集运算时,整个集合都是重复的,效率非常低。 我们可以通过引用来避免这种情况。 setoperator *(set& set1,set& set2)returnres;}

  4. 匿名用户2024-01-29

    在C++中,所谓的指针就是参数,或者变量就是参数,传达的是内容; 换句话说,它是单向传输,传递的是一个数值; 我们可以理解,参考是真实的地址; 这里你的第一行是函数中参数的传递,但使用的参数只是指针,传递实际上是值; 最后一行是引用,是地址传递的真正意义; 下面是一个简单的示例来详细说明:

    让我们从第一行开始。 例如,现在我们传递一个指针变量 b 给 fun(int*x) 参数,(假设变量 b 指向地址 2000),当你在 fun 函数中使用 x 时,使用 x++,根据你上面的解释,如果“在函数体中改变 x 就是改变参数的指向”,函数返回后, B的内容应该变成2004,但实际上并非如此,B的内容仍然是2000,也就是说指针参数仍然是值的单向传递,它不改变相应参数的内容;你可以自己输出B和A的内容,实际看看是否可以!!

    至于改变*x就是改变参数的值,不是很准确; 应该说,改变 *x 就是改变 x 指向的地址中值的内容; 例如,如果参数 b 指向地址 2000,内存地址 2000 中的内容是 100,如果在函数 fun 中使用 (*x)++ 来表示 2000 地址 ++ 的内容,即 100 变成 101,因为内存中 2000 地址的内容发生了变化,所以在调用函数结束后访问内存 2000 时, 里面的内容已经是101了;

    对于第二行:参数用int&x表示引用,即再次重命名要传入的参数,别名x,与上面不同的是函数中的x不分配内存(上面一行调用函数时会给x分配内存,调用返回函数时会释放内存), 但是传递的参数的内存地址会给出给对应的函数,也就是说,对 x 的任何操作都是在操作参数,例如输入参数是 b(int b,这里传递的 b 是 int,当然如果换函数,也可以传入指针类型 b) 其实, x 和 b 等价于一个变量,但它们有两个名称;当你修改函数以使用指针的引用时,在函数中更改表单参数的指向实际上是更改实际参数的指向;

    我想说细节,忍不住啰嗦,希望对你有帮助!!

  5. 匿名用户2024-01-28

    fun(int&x) 其实我是这样理解这个问题的,什么是参考,前面有定义,后面有参考!

    例如:int a=10; fun(a);这是函数调用!

  6. 匿名用户2024-01-27

    第一个是 int 指针。

    第二个是 int 变量。

  7. 匿名用户2024-01-26

    fun(int *x)

    上述说法是错误的。 在函数主体中更改 x 不会影响参数,x 只是参数的副本,更改 x 不会更改参数的值。

    fun(int &x)

    上面这句话也是错误的。 这个参数是对一个参数的引用,也就是说,参数和参数是一样的,它们是同一个对象,在函数体中改变x就是改变参数。 而真正论点的指向并不存在。

    因为这只是一个整容手术。 &x 不是对 x 地址的引用,而是对 x 是对参数的引用这一事实。 也就是说,这意味着 real 和 form 参数是同一个对象。

  8. 匿名用户2024-01-25

    fun(int &x) 这是一个引号。 它从何而来?

相关回答
6个回答2024-08-20

由于它是任意的,因此将其消除,并使用浮点类型直接获得结果。 >>>More

13个回答2024-08-20

在大键函数中,a 和 b 是定义的变量;

在调制函数中是 x,y,max(int x, int y) 在 main() 中是声明的 max 函数,x,y 是形式参数,它只是形式参数,不占用内存。 外层max(int x, int y)为参数,即参数的值传递给参数,即执行时为c=max(a,b); ,它跳转到以下函数中的特定函数,此时,max函数中x=a的值,以及y=b的值。 最后,max 返回 z 的值,在本例中是 x,y 的较大值,分配给 c >>>More

3个回答2024-08-20

《王冲的书房》孤儿王冲从小就喜欢读书,而且从未忘记。 >>>More

4个回答2024-08-20

实例化对类的引用。

9个回答2024-08-20

仔细查看变量范围部分。

其中定义的变量仅在 {} 中有效,未在其中定义的变量将在下一级的 {} 中找到。 >>>More