What's the difference between call by reference and copy/restore

前端 未结 2 1761
暖寄归人
暖寄归人 2020-12-14 10:46

What\'s the difference in the outcome between call by reference and copy/restore?

Background: I\'m currently studying distributed systems. Concerning the passing of

相关标签:
2条回答
  • 2020-12-14 11:06

    Examples taken from here.

    Main code:

    #include <stdio.h>
    
      int a;
    
      int main() {
          a = 3;
          f( 4, &a );
          printf("&#37;d\n", a);
          return 0;
      }
    

    Call by Value:

    f(int x, int &y){
        // x will be 3 as passed argument
        x += a;
        // now a is added to x so x will be 6
        // but now nothing is done with x anymore
        a += 2*y;
        // a is still 3 so the result is 11
    }
    

    Value is passed in and has no effect on the value of the variable passed in.

    Call by Reference:

    f(int x, int &y){
        // x will be 3 as passed argument
        x += a;
        // now a is added to x so x will be 6
        // but because & is used x is the same as a
        // meaning if you change x it will change a
        a += 2*y;
        // a is now 6 so the result is 14
    }
    

    Reference is passed in. Effectively the variable in the function is the same as the one outside.

    Call with Copy/Restore:

    int a;
    void unsafe(int x) {
        x= 2; //a is still 1
        a= 0; //a is now 0
    }//function ends so the value of x is now stored in a -> value of a is now 2
    
    int main() {
        a= 1;
        unsafe(a); //when this ends the value of a will be 2
        printf("%d\n", a); //prints 2
    }
    

    Value is passed in and has no effect on the value of the variable passed in UNTIL the end of the function, at which point the FINAL value of the function variable is stored in the passed in variable.

    The basic difference between call by reference and copy/restore then is that changes made to the function variable will not show up in the passed in variable until after the end of the function while call by reference changes will be seen immediately.

    0 讨论(0)
  • 2020-12-14 11:25

    Call by Copy/Restore is a special case of call-by-reference where the provided reference is unique to the caller. The final result on the referenced values will not be saved until the end of the function.

    This type of calling is useful when a method in RPC called by reference. The actual data is sent to the server side and the final result will send to the client. This will reduce the traffic, since the server will not update the reference each time.

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