IBM在下面的示例中解释了C ++通过引用传递(包括源代码)。
如果我将void swapnum...
更改为void swapnum(int i, int j)
,它是否会通过值传递?
// pass by reference example
// author - ibm
#include <stdio.h>
void swapnum(int &i, int &j) {
int temp = i;
i = j;
j = temp;
}
int main(void) {
int a = 10;
int b = 20;
swapnum(a, b);
printf("A is %d and B is %d\n", a, b);
return 0;
}
<子> Source 子>
答案 0 :(得分:6)
如果按值传递,则执行的任何交换仅在它们传入的函数中受影响或看到,而不是调用代码。此外,一旦你返回主要,你会看到a和b没有交换。这就是为什么在交换数字时要通过ref。
如果您只是问这是否会被称之为,那么是的,你是对的,你将会超越价值。
以下是一个例子:
#include <stdio.h>
void swapnum(int &i, int &j) {
int temp = i;
i = j;
j = temp;
}
void swapByVal(int i, int j) {
int temp = i;
i = j;
j = temp;
}
int main(void) {
int a = 10;
int b = 20;
swapnum(a, b);
printf("swapnum A is %d and B is %d\n", a, b);
swapByVal(a, b);
printf("swapByVal A is %d and B is %d\n", a, b);
return 0;
}
运行此代码,您应该看到更改仅通过引用交换持续存在,即在我们返回main之后,交换值。如果你通过值传递,你会看到调用这个函数并返回main,实际上a和b没有交换。
答案 1 :(得分:3)
是的,但这意味着swapnum将不再像名称所暗示的那样起作用
答案 2 :(得分:2)
是。 '&amp;' operator指定参数应指向传入的内存地址。
通过删除此运算符,可以创建对象的副本并将其传递给函数。