-
看到有几条线**,却不告诉我们是哪条线**,吊着别人的胃口不好。
-
在C中,没有一般的参考概念,这是C++的概念。
在 C++ 的函数参数中,有两种形式,其中:
typevar,称为引用方法;
typevar,称为传递。
两者之间的区别在于,当传递引用时,实际传递给函数的表单参数是对实际参数的引用,而不仅仅是传递给函数的值。 具体性能如下:
传递引用时,参数和参数是相同的变量,即它们使用相同的内存空间并具有相同的地址。 传输值时,两者的地址不同;
传递引用时,没有新变量,因此没有类对象参数的构造和销毁。 如果是值传递调用,调用时会构造,退出函数时会解构。
由于引用使用的是原始参数的地址,因此引用参数值的修改会在退出函数被埋没后反映在大键函数中,而传递值调用对参数的修改不会影响大键功能。
-
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;}
-
在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 等价于一个变量,但它们有两个名称;当你修改函数以使用指针的引用时,在函数中更改表单参数的指向实际上是更改实际参数的指向;
我想说细节,忍不住啰嗦,希望对你有帮助!!
-
fun(int&x) 其实我是这样理解这个问题的,什么是参考,前面有定义,后面有参考!
例如:int a=10; fun(a);这是函数调用!
-
第一个是 int 指针。
第二个是 int 变量。
-
fun(int *x)
上述说法是错误的。 在函数主体中更改 x 不会影响参数,x 只是参数的副本,更改 x 不会更改参数的值。
fun(int &x)
上面这句话也是错误的。 这个参数是对一个参数的引用,也就是说,参数和参数是一样的,它们是同一个对象,在函数体中改变x就是改变参数。 而真正论点的指向并不存在。
因为这只是一个整容手术。 &x 不是对 x 地址的引用,而是对 x 是对参数的引用这一事实。 也就是说,这意味着 real 和 form 参数是同一个对象。
-
fun(int &x) 这是一个引号。 它从何而来?
在大键函数中,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