void inc(int *pInt)
{
*pInt = *pInt + 1;
}
pInt is a pointer to an integer. The value of pInt is not
an integer, but the address of the storage of an integer. In the
statement in the subroutine, *pInt refers to ``whatever integer
pInt points to.'' On the left hand side of the assignment,
*pInt specifies where to store the result of the right hand side.
Although this can accomplish the same as the C++ code in section 4.2, it is also more dangerous. Let us consider the following incorrect code:
void inc(int *pInt)
{
pInt = pInt + 1;
}
This code compiles just fine, it may generate a warning message. However,
it does not do what the earlier code does. pInt refers to the
parameter itself. The assignment statement increments the pointer itself,
but it does not do anything to what the pointer points to. There is no
dereference operator!
This is why C++ includes a true pass-by-reference mechanism.
Copyright © 2006-08-28 by Tak Auyeung