Kev*_*ith 0 c++ pass-by-reference pass-by-value
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;
}
Run Code Online (Sandbox Code Playgroud)
如果按值传递,则执行的任何交换仅在它们传入的函数中受影响或看不到,而不是调用代码.此外,一旦你返回主要,你会看到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;
}
Run Code Online (Sandbox Code Playgroud)
运行此代码,您应该看到更改仅通过引用交换持续存在,即在我们返回main之后,交换值.如果你通过值传递,你会看到调用这个函数并返回main,实际上a和b没有交换.