代码之家  ›  专栏  ›  技术社区  ›  Kevin Meredith

C++通过引用程序

  •  0
  • Kevin Meredith  · 技术社区  · 15 年前

    IBM在下面的示例中解释C++的PASS PASS引用(包含源代码)。

    如果我改变 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 回复  |  直到 15 年前
        1
  •  6
  •   JonH    15 年前

    如果传递值,则执行的任何交换仅在传递给它们的函数中受影响或可见,而不是在调用代码中。另外,一旦你回到主系统,你会发现A和B没有互换。这就是为什么当交换你想通过参考号的号码时。

    如果你只是在问这是否就是所谓的,那么是的,你是对的,你是在传递价值。

    下面是一个例子:

    #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之后,这些值就被交换了。如果传递by value,您将看到调用这个函数并返回到main,实际上a和b没有交换。

        2
  •  3
  •   Mike    15 年前

    是的,但这意味着swapnum将不再像名字所暗示的那样有效。

        3
  •  2
  •   riwalk    15 年前

    对。“&”运算符指定参数应指向传入内容的内存地址。

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