Aussie AI
Pointers and Arrays
-
Book Excerpt from "Generative AI in C++"
-
by David Spuler, Ph.D.
Pointers and Arrays
There is a close relationship in C++ between arrays and pointers. Array names are, in many ways, just pointers to the first element in the array. The array indexing operation is identical to a pointer expression involving address arithmetic. The following algebraic identities hold:
array[exp] == *(array + exp) &array[exp] == array + exp
These relationships have a number of consequences. First, the commutativity of +
means
that exp1[exp2]
is equivalent to exp2[exp1]
, which leads to weird syntax tricks like “n[ptr]
” instead of “ptr[n]
”.
Another consequence is that, in many situations, pointers can be used instead of arrays. For example, it is legal to apply the array indexing operator (i.e. square brackets) to a pointer. For example:
x = ptr[3];
Just like arr[3]
, this sets x
to equal the third element away from ptr
, where ptr
is pointing into an array.
Array Function Parameters: The array and function relationship is complicated when an array is a function parameter. When an array is passed to a function, the address of the first element of the array is passed. An array formal parameter is implemented as a pointer variable (i.e. a pointer pointing to the start of the array).
This explains why arrays are passed by reference, not by value. A local copy of the array is not used inside the function. Instead, a pointer to the original array is used. Hence, any change to an element of the local array variable is actually changing the original array (i.e. pass-by-reference instead of pass-by-value).
The differences between pointers and arrays are few. The main one is that an array
name is not a variable, whereas a pointer is.
Hence, an ordinary array name declared as a local variable
cannot be assigned to, or incremented, whereas a local pointer variable can be.
An array is similar to a constant pointer (e.g. int *const ptr
).
Note that this is untrue when the array is a function parameter, when it can be incremented or modified.
There are also the differences between pointers and arrays in relation to initializations. Consider the two initializations:
char *p = "hello"; char arr[100] = "hello";
For the pointer p
, the string "hello"
is stored in separate memory. Only the required
number of bytes are allocated (six, because of the extra character zero added by the
compiler to terminate the string). For the character array “arr
”, 100 bytes are allocated, but
only the first six are filled.
• Next: • Up: Table of Contents |
The new AI programming book by Aussie AI co-founders:
Get your copy from Amazon: Generative AI in C++ |