Tải bản đầy đủ (.pdf) (27 trang)

Lecture Programming in C++ - Chapter 11: Pointer variables

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (513.97 KB, 27 trang )

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 1­D arrays of double with size 2

array_ptr  function2 (argument);
– Indicates pointer to 1­D 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


×