//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