<< Chapter < Page | Chapter >> Page > |
The value of a is 7
The value of *aPtr is 7
Notice that the address of a and the value of aPtr are identical in the output, confirming that the address of a is assigned to the pointer variable aPtr.
In C++, programmers can use pointers and the dereference operator to simulate call-by-reference. When calling a function with arguments should be modified, the addresses of the arguments are passed. This is normally achieved by applying the address-of operator (&) to the name of the variable whose value will be used. A function receiving an address as an argument must define a pointer parameter to receive the address.
Example
// Cube a variable using call-by-reference
// with a pointer argument
#include<iostream.h>
void cubeByReference( int * ); // prototype
int main()
{
int number = 5;
cout<<"The original value of number is "<<number;
cubeByReference(&number );
cout<<"\nThe new value of number is "<<number<<endl;
return 0;
}
void cubeByReference( int *nPtr )
{
*nPtr = (*nPtr) * (*nPtr) * (*nPtr); // cube number in main
}
The output of the above propgram:
The original value of number is 5
The new value of number is 125
Notice that the name of an array by itself is equivalent to the base address of that array. That is, the name z in isolation is equivalent to the expression&z[0].
Example
#include<iostream.h>
int main()
{
int z[] = { 1, 2, 3, 4, 5};
cout<<“The value return by ‘z’ itself is
the addr “<<z<<endl;
cout<<“The address of the 0th element of
z is “<<&z[0]<<endl;
return 0;
}
The output of the above program:
The value return by ‘z’ itself is the addr 0x0065FDF4
The address of the 0th element of z is 0x0065FDF4
Accessing Array Element Using Pointer and Offset
Now, let us store the address of array element 0 in a pointer. Then using the indirection operator, *, we can use the address in the pointer to access each array element.
For example, if we store the address of grade[0] into a pointer named gPtr, then the expression *gPtr refers to grade[0].
One unique feature of pointers is that offset may be included in pointer expression.
For example, the expression *(gPtr + 3) refers to the variable that is three (elements) beyond the variable pointed to by gPtr.
The number 3 in the pointer expression is an offset. So gPtr + 3 points to the element grade[3] of the grade array.
Example
#include<iostream.h>
int main()
{
int b[] = { 10, 20, 30, 40 }, i, offset;
int *bPtr = b; // set bPtr to point to array b
cout<<"Array b printed with:\n"
<<"Array subscript notation\n";
for ( i = 0; i<4; i++ )
cout<<"b["<<i<<"] = "<<b[ i ]<<'\n';
cout<<"\nPointer/offset notation\n";
for ( offset = 0; offset<4; offset++ )
cout<<"*(bPtr + "<<offset<<") = "
<<*( bPtr + offset )<<'\n';
return 0;
}
The output of the above program is:
Array b printed with:
Array subscript notation
b[0] = 10
b[1] = 20
b[2] = 30
b[3] = 40
Pointer/offset notation
*(bPtr + 0) = 10
*(bPtr + 1) = 20
*(bPtr + 2) = 30
*(bPtr + 3) = 40
In C++ we often use character arrays to represent strings. A string is an array of characters ending in a null character (‘\0’). Therefore, we can scan through a string by using a pointer. Thus, in C++, it is appropriate to say that a string is a constant pointer – a pointer to the string’s first character.
Notification Switch
Would you like to follow the 'Programming fundamentals in c++' conversation and receive update notifications?