Chapter 11 – Pointer Variables
Declaring a Pointer Variable
Declared with data type, * and identifier
type* pointer_variable;
* follows data type
– Usually no space between so more obvious
– Space allowed, so 1 or more would still work
Reserves space for storage
Must initialize or assign address
Lesson 11.1
Assigning an Address
Use the "address of" operator (&)
General form:
pointer_variable = &ordinary_variable
Name of the pointer Name of ordinary
variable
Lesson 11.1
Using a Pointer Variable
Can be used to access a value
Unary operator * used
* pointer_variable
– In executable statement, indicates value
Common practice to use suffix ptr for
pointer variables
– Example: width_ptr
Lesson 11.1
Pointer Operators
Ampersand &
– Address of
Asterisk *
– Get value at the address
Lesson 11.1
Uses of *
Binary multiplication operator
volume = height * depth * width;
Declaration specifier indicating address to
be stored in variable's memory cell
double* height_address;
Unary operator indicating to get value or
access memory cells at addressed
*height_address = 10.5;
Lesson 11.1
Uses of &
Declaration of function header to indicate a
reference
void function1 (double&)
In executable statement to indicate
"address of"
height_address = &height;
Lesson 11.1
Spacing a *
Somewhat flexible in declaration or header
double* height; Confusing – looks like
double *height; multiplication usage
double * height;
For multiple pointer declarations
double *height *width;
or
double* height;
double* width;
Lesson 11.1
Transferring Addresses to Functions
In declaration and header use type* in
argument list
type function (type*, type*);
type funcName (type* name, type* name)
In function call use &variable in argument list
to pass address
identifier = funcName (&name1, &name2);
Lesson 11.2
Using Pointer for Array Transfer
rtype function (type*, int);
Declaration
function (array, num);
Call
Header
rtype function (type* b, int num_elem)
{
Function
code using b with brackets (b[n])
Body
}
Lesson 11.3
Example:
void function2 (double*, int);
int main ( )
{
double c[5] = {2.1, 3.5, 6.4, 1.9, 4.5};
Name of array is address
function2 ( c, 5);
}
void function2 (double* b, int num_elem)
Lesson 11.3
Pointer Variables and Math
Declare variable as pointer
double* b;
– Holds address
Can perform addition and subtraction
– Purpose of add is to advance to subsequent cell
b + 1 (double is 8 bytes, so adds 8 bytes)
– Subtraction goes back to previous memory cell
b – 1 (goes back 8 bytes)
Lesson 11.4
Returning Array Address
from Function
Example: Function declaration and header
double* get_array_address (double [ ] );
double*
double* get_array_address (double c[ ] )
Could also use
Now a return statement with variable that
indicates address in the function body
return c;
Lesson 11.5
Pointer Variables
Point to 2, 4, or 8 bytes of memory
depending on type of variable
Can point to entire array
– Holds address of beginning of array
– Pointer declaration indicates size of memory
greater than single value
Lesson 11.6
Creating Pointer to Arrays
Example: double (*f) [2];
Array elements of type double
( ) are REQUIRED
Declares f to be a pointer
Declares h to be a pointer
One dimensional array of size 2
Example: double (*h) [3] [5];
Two dimensional array of size 3 * 5
(15 elements)
Lesson 11.6
typedef Statement
Used to create an alias for a data type
– Note – not a new data type
Basic form
typedef type synonym_1, synonym_n;
Any valid data type
List of valid identifiers
(any number)
Lesson 11.6
Uses of typedef
Improve readability and understandability
of the code
Easier to modify programs that are
implementation dependent
Lesson 11.6
Arrays and typedef
General form:
typedef type name [size];
– type is the type of values in the array
– name is the alias to be used as the data type in a
declaration
– size is array size
Lesson 11.6
typedef for Pointer to Array
General form:
typedef type (*name) [size];
– type is type of values in array
– name is the alias to be used as data type in
declaration
– size is array size
Lesson 11.6
Returning a Pointer
Given the example:
typedef double (*array_ptr) [2];
– Creates alias array_ptr for declarations of
pointers to 1D arrays of double with size 2
array_ptr function2 (argument);
– Indicates pointer to 1D array is returned from
function
Lesson 11.6
Multidimensional Arrays
C++ sees array of arrays
Example: int a[2] [3] [4];
–
–
–
–
–
Can work with whole (or 1) array
Can use 2 arrays of [3] [4]
Can use 6 arrays of [4]
Can use 24 integers
Pointers: int (*b)[3] [4], (*c)[4], *d, a
Can assign addresses with & operator ( b = &a[0]; )
Lesson 11.6
Pointers to Objects
Special arrow operator >
– Negative and greater than symbol with no space
between
– Used to access members with object's address
Declaring pointer Class_name* ptr_name;
Initializing pointer ptr_name = &object_name;
Calling member function (2 argument example)
ptr_name > function_name (arg1, arg2)
Lesson 11.7
Pointers as Data Members
General form
Name of the class
class Class_name
{
private:
type* pointer_name;
public:
Name of member function
type function_name ( );
};
Any valid data type including
name of struct or class
Lesson 11.8
Dynamic Memory Allocation
Optimize memory space with new and
delete operators
– Reserve and unreserve memory while program
is execution
– Pointer variables important because operators
work with addresses of memory reserved
Lesson 11.9
new Operator
General form:
new type [num_elements]
– type is data type of array elements
– num_elements is number of array elements
Reserves memory but does NOT fill with
values
– new returns address of memory it reserves
type* array_address;
– Value assigned to pointer variable of same type
array_address = new type [num];
Lesson 11.9