Chapter: 10


              Pointers
                Lecture: 36
              Date: 15.10.2012
What are Pointers Used For?

   Accessing array elements
   Passing arguments to a function when the function needs
    to modify the original argument
   Passing arrays and strings to functions
   Obtaining memory from the system
   Creating data structures such as linked lists
Memory and Addresses



    1270

    1271

    1272

    1273

    1274

    1275


   Computer Memory
Memory and Addresses
   Addresses   Locations


     1270

     1271

     1272

     1273

     1274

     1275


   Computer Memory
Memory and Addresses




int IntVar1;    //2 bytes

int IntVar2;   //2 byte
Memory and Addresses
                            Addresses   Locations


                              1270

                              1271
int IntVar1;    //2 bytes
                              1272                  IntVar1
int IntVar2;   //2 byte       1273

                              1274

                              1275                  IntVar2

                            Computer Memory
Memory and Addresses




int IntVar1 = 25;

int IntVar2 = 11;
Memory and Addresses
                     Addresses     Locations


                       1270

                       1271
int IntVar1 = 25;                 25           IntVar1
                       1272

int IntVar2 = 11;      1273

                       1274
                                  11           IntVar2
                       1275




                              Contents/Data
Memory and Addresses
   In some cases we may be interested in knowing the address
    where our variable is being stored during runtime.
   The address that locates a variable within memory is what
    we call a reference to that variable.
    e.g.,
                              & IntVar;

                       Address-of/reference

   When preceding the name of the variable “IntVar” with the
                           operator
    reference operator (&) we are no longer talking about the
    content of the variable itself, but about its reference (i.e., its
    address in memory).
Memory and Addresses
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int IntVar1;
int IntVar2;
cout << &IntVar1 << endl     //print the addresses
      << &IntVar2 << endl;
getch();
return 0; }
Pointer Variable
    The variable that stores the reference to another variable is
     what we call a pointer.
    e.g.,




               ptr &InVar;
Pointer Variable
    The variable that stores the reference to another variable is
     what we call a pointer.
    e.g.,
               Pointer-to             Pointer/Pointer-variable


               int * ptr; //variable “ptr” as a pointer-to “int”
                     ptr &InVar;
Accessing Addresses
int main()
{ int IntVar1 = 25;
   int IntVar2 = 11;
   int* ptr; //pointer to integers
   ptr = &IntVar1; //pointer points to IntVar1
   cout << ptr << endl //print the address of IntVar1
  ptr = &IntVar2
  cout << ptr << endl //print the address of IntVar2
  getch();
  return 0; }
int* ptr;                                1270
ptr = &IntVar1;           ptr
                                         1271
  cout << ptr ;
                          1271
                                                25   IntVar1
                                         1272
                  ptr points-to to the
                                         1273
                  address of IntVar1
                                         1274
                                                11
                                         1275        IntVar2

                                         1270

                                         1271
                                                25
                                         1272        IntVar1
int* ptr;                ptr             1273
ptr = &IntVar2;
                          1274           1274
  cout << ptr ;
                                                11
                  ptr points-to to the   1275        IntVar2
                  address of IntVar2
Accessing Contens
int main()
{ int IntVar1 = 25;
   int IntVar2 = 11;
   int* ptr; //pointer to integers
   ptr = &IntVar1; //pointer points to IntVar1
   cout << *ptr << endl //print the content of IntVar1
   ptr = &IntVar2
   cout << *ptr << endl //print the content of IntVar2
   getch();
   return 0; }
ptr
int* ptr;
ptr = &IntVar1;                       25   IntVar1
                         *ptr is 25
  cout << *ptr ;

                                      11
 deference /indirection operator.
                                           IntVar2
 Expression *ptr means the value of
 the variable pointed to by ptr.



                                      25
                                           IntVar1
                              ptr
int* ptr;
ptr = &IntVar2;                       11
                         *ptr is 11
                                           IntVar2
  cout << *ptr ;
Pointer to Void
   The address that is put in a pointer variable must be the
    same type as the pointer, for example, the address of a float
    variable can’t be assigned to a pointer to int.

    float floVar = 25.67;
    int* ptrInt = &floVar;
Pointer to Void
   The address that is put in a pointer variable must be the
    same type as the pointer, for example, the address of a float
    variable can’t be assigned to a pointer to int.

    float floVar = 25.67;
    int* ptrInt = &floVar; //ERROR: can’t assign float* to int*
Pointer to Void
   The address that is put in a pointer variable must be the
    same type as the pointer, for example, the address of a float
    variable can’t be assigned to a pointer to int.
    float floVar = 25.67;
    int* ptrInt;
    ptrInt = &floVar; //ERROR: can’t assign float* to int*

   Exception to that case is a general-purpose pointer that can
    point to any data type, e.g.,

    void* ptrVoid; //pointer to void
Pointer to Void
   The address that is put in a pointer variable must be the
    same type as the pointer, for example, the address of a float
    variable can’t be assigned to a pointer to int.
    float floVar = 25.67;
    int* ptrInt;
    ptrInt = &floVar; //ERROR: can’t assign float* to int*

   Exception to that case is a general-purpose pointer that can
    point to any data type, e.g.,
    void* ptrVoid; //pointer to void
        ptrVoid = &floVar; //OK
Counting by Integers - Arrays

Lec 36 - pointers

  • 1.
    Chapter: 10 Pointers Lecture: 36 Date: 15.10.2012
  • 2.
    What are PointersUsed For?  Accessing array elements  Passing arguments to a function when the function needs to modify the original argument  Passing arrays and strings to functions  Obtaining memory from the system  Creating data structures such as linked lists
  • 3.
    Memory and Addresses 1270 1271 1272 1273 1274 1275 Computer Memory
  • 4.
    Memory and Addresses Addresses Locations 1270 1271 1272 1273 1274 1275 Computer Memory
  • 5.
    Memory and Addresses intIntVar1; //2 bytes int IntVar2; //2 byte
  • 6.
    Memory and Addresses Addresses Locations 1270 1271 int IntVar1; //2 bytes 1272 IntVar1 int IntVar2; //2 byte 1273 1274 1275 IntVar2 Computer Memory
  • 7.
    Memory and Addresses intIntVar1 = 25; int IntVar2 = 11;
  • 8.
    Memory and Addresses Addresses Locations 1270 1271 int IntVar1 = 25; 25 IntVar1 1272 int IntVar2 = 11; 1273 1274 11 IntVar2 1275 Contents/Data
  • 10.
    Memory and Addresses  In some cases we may be interested in knowing the address where our variable is being stored during runtime.  The address that locates a variable within memory is what we call a reference to that variable. e.g., & IntVar; Address-of/reference  When preceding the name of the variable “IntVar” with the operator reference operator (&) we are no longer talking about the content of the variable itself, but about its reference (i.e., its address in memory).
  • 11.
    Memory and Addresses #include<iostream> #include <conio.h> using namespace std; int main() { int IntVar1; int IntVar2; cout << &IntVar1 << endl //print the addresses << &IntVar2 << endl; getch(); return 0; }
  • 12.
    Pointer Variable  The variable that stores the reference to another variable is what we call a pointer. e.g., ptr &InVar;
  • 13.
    Pointer Variable  The variable that stores the reference to another variable is what we call a pointer. e.g., Pointer-to Pointer/Pointer-variable int * ptr; //variable “ptr” as a pointer-to “int” ptr &InVar;
  • 14.
    Accessing Addresses int main() {int IntVar1 = 25; int IntVar2 = 11; int* ptr; //pointer to integers ptr = &IntVar1; //pointer points to IntVar1 cout << ptr << endl //print the address of IntVar1 ptr = &IntVar2 cout << ptr << endl //print the address of IntVar2 getch(); return 0; }
  • 15.
    int* ptr; 1270 ptr = &IntVar1; ptr 1271 cout << ptr ; 1271 25 IntVar1 1272 ptr points-to to the 1273 address of IntVar1 1274 11 1275 IntVar2 1270 1271 25 1272 IntVar1 int* ptr; ptr 1273 ptr = &IntVar2; 1274 1274 cout << ptr ; 11 ptr points-to to the 1275 IntVar2 address of IntVar2
  • 16.
    Accessing Contens int main() {int IntVar1 = 25; int IntVar2 = 11; int* ptr; //pointer to integers ptr = &IntVar1; //pointer points to IntVar1 cout << *ptr << endl //print the content of IntVar1 ptr = &IntVar2 cout << *ptr << endl //print the content of IntVar2 getch(); return 0; }
  • 17.
    ptr int* ptr; ptr =&IntVar1; 25 IntVar1 *ptr is 25 cout << *ptr ; 11 deference /indirection operator. IntVar2 Expression *ptr means the value of the variable pointed to by ptr. 25 IntVar1 ptr int* ptr; ptr = &IntVar2; 11 *ptr is 11 IntVar2 cout << *ptr ;
  • 18.
    Pointer to Void  The address that is put in a pointer variable must be the same type as the pointer, for example, the address of a float variable can’t be assigned to a pointer to int. float floVar = 25.67; int* ptrInt = &floVar;
  • 19.
    Pointer to Void  The address that is put in a pointer variable must be the same type as the pointer, for example, the address of a float variable can’t be assigned to a pointer to int. float floVar = 25.67; int* ptrInt = &floVar; //ERROR: can’t assign float* to int*
  • 20.
    Pointer to Void  The address that is put in a pointer variable must be the same type as the pointer, for example, the address of a float variable can’t be assigned to a pointer to int. float floVar = 25.67; int* ptrInt; ptrInt = &floVar; //ERROR: can’t assign float* to int*  Exception to that case is a general-purpose pointer that can point to any data type, e.g., void* ptrVoid; //pointer to void
  • 21.
    Pointer to Void  The address that is put in a pointer variable must be the same type as the pointer, for example, the address of a float variable can’t be assigned to a pointer to int. float floVar = 25.67; int* ptrInt; ptrInt = &floVar; //ERROR: can’t assign float* to int*  Exception to that case is a general-purpose pointer that can point to any data type, e.g., void* ptrVoid; //pointer to void ptrVoid = &floVar; //OK
  • 22.

Editor's Notes