C ++ Pass by Reference程序

时间:2010-08-03 17:51:48

标签: 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;
}

<子> Source

3 个答案:

答案 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指定参数应指向传入的内存地址。

通过删除此运算符,可以创建对象的副本并将其传递给函数。