On completion of this chapter students will know how to: Declare and initialize pointer variables, pass addresses to functions, return an address from a function, reserve memory during execution, link classes with accessor functions.
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 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 delete Operator General form: delete [ ] array_address; – array_address is pointer variable Releases memory stored at address indicated Knows size of memory reserved by new and releases memory for all the array delete address; – deletes memory for single element Lesson 11.9 Summary Learned how to: Declare and initialize pointer variables Pass addresses to functions Return an address from a function Reserve memory during execution Link classes with accessor functions ... 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. .. 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];... 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