Pointers and references

From Rosetta Code
Revision as of 14:35, 25 January 2007 by Ce (talk | contribs) (Basic pointer and reference operations in C++)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Task
Pointers and references
You are encouraged to solve this task according to the task description, using any language you may know.

The goal of this task is

  • To make a pointer or a reference to refer to some given object
  • To access the object referred to through the reference and/or pointer
  • To change the pointer or reference to refer to another object (where applicable)
  • To change the pointer or reference so that it does not refer to any object (where applicable)
  • To get a pointer to the first element of an array (where applicable)
  • To move the pointer to another object in the array, aka pointer arithmetic (where applicable)
  • To access another object in the same array through the pointer (where applicable)

C++

With pointers:

The following code creates a pointer to an int variable

 int var = 3;
 int* pointer = &var;
 // or alternatively:
 int* pointer2(&var);

Access the integer variable through the pointer:

 int v = *pointer; // sets v to the value of var (i.e. 3)
 *pointer = 42; // sets var to 42

Change the pointer to refer to another object

 int othervar;
 pointer = &othervar;

Change the pointer to not point to any object

 pointer = 0;
 // or alternatively:
 pointer = NULL;

Get a pointer to the first element of an array:

 int array[10];
 pointer = array;
 // or alternatively:
 pointer = &array[0];

Move the pointer to another object in the array

 pointer += 3; // pointer now points to array[3]
 pointer -= 2; // pointer now points to array[1]

Access another object in the same array through the pointer

 v = pointer[3]; // accesses third-next object, i.e. array[4]
 v = pointer[-1]; // accesses previous object, i.e. array[0]
 // or alternatively
 v = *(pointer + 3); // array[4]
 v = *(pointer - 1); // array[0]

With references:

The following code create a reference to an int variable:

 int var = 3;
 int& ref = var;
 // or alternatively:
 int& ref2(var);

Access the integer variable through the reference

 int v = ref; // sets v to the value of var, that is, 3
 ref = 42; // sets var to 42

References cannot be changed to refer to other objects, and cannot (legally) made to refer to no object.

Get a reference to the first element of an array:

 int array[10];
 int& ref3 = array[0];

Changing the reference to refer to another object of the array is not possible.

Accessing another object of the array through the reference:

 v = (&ref)[3]; // read value of array[3]; however doing this is bad style