0

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;
}

来源

4

3 回答 3

6

如果按值传递,则执行的任何交换只会在它们传递到的函数中受到影响或看到,而不是在调用代码中。此外,一旦您返回 main,您将看到 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 之后,值被交换了。如果按值传递,您将看到调用此函数并返回到实际上 a 和 b 没有交换的 main。

于 2010-08-03T17:55:04.143 回答
3

是的,但这意味着 swapnum 将不再像名称所暗示的那样工作

于 2010-08-03T17:53:46.237 回答
2

是的。'&' 操作符指定参数应该指向传入的内存地址。

通过删除此运算符,生成对象的副本并将其传递给函数。

于 2010-08-03T17:54:20.620 回答