无法更改函数中的值

Unable to change values in a function

本文关键字:函数      更新时间:2023-10-16

我从开发开始,很抱歉这个新手的问题。

我需要创建一个在2个变量之间交换值的函数。

我已经写了这段代码,但vars中没有任何更改,我应该更改什么?我犯了什么错?

#include <iostream>
using namespace std;
void swap_values( int x, int y);
int main(void) {
   int a,b;    
   a = 2;   
   b = 5;  
   cout << "Before: " << a << " " << b << endl; 
   swap_values( a,b );   
   cout << "After: " << a << " " << b  << endl;   
}  
void swap_values( int x, int y ){
   int z;
   z = y;
   y = x;
   x = z;
}

您需要通过引用传递变量:

void swap_values( int& x, int& y )
{
   int z;
   z = y;
   y = x;
   x = z;
}

CCD_ 1和CCD_ 2是主要编程语言中的关键概念。在C++中,除非通过引用指定,否则会出现pass-by-value

这基本上意味着传递给函数的不是原始变量,而是副本。

这就是为什么在函数之外,变量保持不变——因为在函数内部,只有副本被修改。

如果通过引用(int& x, int& y)传递,函数将对原始变量进行操作。

您需要了解,在默认情况下,C++使用按值调用约定。

当您调用swap_values时,它的堆栈帧会接收作为参数传递给它的值的副本。因此,参数int x, int y与调用者和变量int a, b完全无关。

幸运的是,C++还支持引用调用(请参阅维基百科,或一本关于它的好的编程语言设计教科书),这本质上意味着函数中的变量与调用方中的变量绑定(或别名)(这是一种粗略的简化)。

引用调用的语法为:

void swap_values( int &x, int &y ){
    // do your swap here
}

您正在传递值。您仍然可以通过值传递,但需要使用指针。

这是需要的正确代码:

void swap(int *i, int *j) {
   int t = *i;
   *i = *j;
   *j = t;
}
void main() {
   int a = 23, b = 47;
   printf("Before. a: %d, b: %dn", a, b);
   swap(&a, &b);
   printf("After . a: %d, b: %dn", a, b);
}

还有一个小文档,解释"通过引用"与"通过价值":http://www.tech-recipes.com/rx/1232/c-pointers-pass-by-value-pass-by-reference/