| 
 
Passing arguments 
For examplatory reasons I will do a very simple type of function
and leave it to you to find out how it works exactly.
-  Passing by value (and const value):
 
     
     
     
     #include <iostream.h>                              
  
     void f1(int x) {                                          
         
     cout<<"The value of x = "<< x << endl;  
         x *= 3;                                
         
     cout<<"The value of 3x = "<< x << endl;  
     }                                                        
  
     int main() {                                              
                    f1(44);                     
                    f1(44-21);                  
                    int u = 17;                 
                    f1(u);                      
         
     cout << "u = " << u << endl;      
                    f1(5*u-32);                 
     }                                                        
  
      |  
       
     Here the sequence of outputs would be something like 
     
     
     
     The value of x = 44 
     The value of 3x = 132 
     The value of x = 23 
     The value of 3x = 69 
     The value of x = 17 
     The value of 3x = 51 
     u = 17 
     The value of x = 53 
     The value of 3x = 159 
      |  
       
     In case you do not change the value by any means, you might add a
     const in front of it. In our example case, this boils down to 
     
     
     
     #include <iostream.h>                              
  
     void f2(const int x) {                                          
         
     cout<<"The value of x = "<< x << endl;  
     }                                                         
      |  
       
     without any noticeable changes. This extra assignment
     const has the main effect to ease up the compilers work
     and to keep you (the programmer) honest. Of course, statements
     like  x *= 3 are not allowed within this function.
 -  Passing by reference:
 
     In "passing by values" you insert directly the value into your
     function, whereas in "passing by reference" you pass the address
     of your object inside the memory to your function to work with
     it. The latter version allows to persistently change the value
     within this address.                                      
     Just one more word to how "passing by value" and
     "passing by reference" work: In the former, the value is
     copied into a new address in memory (instantiated) to work with
     it. When leaving the function this memory is freed again, the
     value deleted. In the latter, no new instance is created, instead
     the code works with the already available instance. 
  
      
     Let me contrast the examples above with: 
     
     
     
     #include <iostream.h>                              
  
     void f3(int & x) {                                        
         
     cout<<"The value of x = "<< x << endl;  
         x *= 3;                                
         
     cout<<"The value of 3x = "<< x << endl;  
     }                                                        
  
     int main() {                                              
                    int u = 17;                 
                    f3(u);                      
                    
     cout << "u = " << u << endl;      
     }                                                        
  
      |  
       
     In contrast to passing by value, the passing by reference
     (indicated by the &) allows the function to change the value of
     the argument. Consequently the output would look like: 
     
     
     
     The value of x = 17 
     The value of 3x = 51 
     u = 51 
      |  
       
     Note, that you always have to pass a variable from the
     main-method to the function to allow the complier to instantiate
     a reference to it. I would like to stress the similarity with
     pointers. 
  
[prev] 
   [top] 
   [next] 
 
   |