//func_p_r.cc #include <iostream> void ref_int(int&); void ptr_int(int*); int main() { int x = 22; cout << x << endl; ref_int(x); cout << x << endl; ptr_int(&x); cout << x << endl; return 0; } void ref_int(int& y) { for (int i = 0; i < 10; i++) y = y + i; } void ptr_int(int* y) { for (int i = 0; i < 10; i++) *y = *y - i; }
In the case of the pass by reference since ref_int() expects a reference the compiler takes care of it for us and we can use the argument just like it was a "normal" variable.
ref_int(x); ... void ref_int(int& y) { for (int i = 0; i < 10; i++) y = y + i; }
In the case of passing a pointer we need to use the address-of operator - &x - and the function has to have a pointer argument. The function also has to dereference the pointer in order to access the value pointed to.
ptr_int(&x); ... void ptr_int(int* y) { for (int i = 0; i < 10; i++) *y = *y - i; }
In the bad old days all reference arguments were handled this way, addresses were explicitly passed as arguments. It works fine as long as the programmer remembers what is happening.
Copyright © 1999 - 2001
David Beech