Unable to change values in a function

后端 未结 3 903
逝去的感伤
逝去的感伤 2021-01-20 23:59

I\'m starting with developing, sorry about this newbie question.

I need to create a function that swap values between 2 vars.

I have wrote this code, but no chan

相关标签:
3条回答
  • 2021-01-21 00:12

    You need to understand that by default, C++ use a call-by-value calling convention.

    When you call swap_values, its stack frame receives a copy of the values passed to it as parameters. Thus, the parameters int x, int y are completely independent of the caller, and the variables int a, b.

    Fortunately for you, C++ also support call-by-reference (see wikipedia, or a good programming language design textbook on that), which essentially means that the variables in your function are bound to (or, an alias of) the variables in the caller (this is a gross simplification).

    The syntax for call-by-reference is:

    void swap_values( int &x, int &y ){
        // do your swap here
    }
    
    0 讨论(0)
  • 2021-01-21 00:14

    You need to pass the variables by reference:

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

    pass-by-value and pass-by-reference are key concepts in major programming languages. In C++, unless you specify by-reference, a pass-by-value occurs.

    It basically means that it's not the original variables that are passed to the function, but copies.

    That's why, outside the function, the variables remained the same - because inside the functions, only the copies were modified.

    If you pass by reference (int& x, int& y), the function operates on the original variables.

    0 讨论(0)
  • 2021-01-21 00:15

    you are passing by value. you can still pass by value but need to work with pointers.

    here is the correct code needed:

    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: %d\n", a, b);
       swap(&a, &b);
       printf("After . a: %d, b: %d\n", a, b);
    }
    

    also a small document that explains "by reference" vs "by value" : http://www.tech-recipes.com/rx/1232/c-pointers-pass-by-value-pass-by-reference/

    0 讨论(0)
提交回复
热议问题