Cs 192
This presentation is the property of its rightful owner.
Sponsored Links
1 / 18

CS 192 PowerPoint PPT Presentation


  • 57 Views
  • Uploaded on
  • Presentation posted in: General

CS 192. Lecture 13 Winter 2003 January 5-6, 2004 Dr. Shafay Shamail. Void Pointer. int age = 20; int *ageptr = &age; void *vptr = (void *)ageptr; int *newptr = (int *)vptr; Can’t do: vptr++ vptr— vptr + 2 As the base type of vptr is not known.

Download Presentation

CS 192

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Cs 192

CS 192

Lecture 13

Winter 2003

January 5-6, 2004

Dr. Shafay Shamail


Void pointer

Void Pointer

int age = 20;

int *ageptr = &age;

void *vptr = (void *)ageptr;

int *newptr = (int *)vptr;

Can’t do:

vptr++

vptr—

vptr + 2

As the base type of vptr is not known


Pointers and multidimensional arrays

Pointers and Multidimensional Arrays

int ar[2][3] = {

{ 0, 1, 2 },

{ 3, 4, 5 }

};

ar[1][2]= *(ar[1] + 2)

= *(*(ar+1) + 2)

= *(int *)((char *)ar + (1*3*4) + (2*4))

= *(int *)((char *)ar + 20)

Where 3 = # of elements in each row

And each int is of 4 byte long


Initializing multi dimentional arrays

Initializing Multi-Dimentional Arrays

static int example[5][3] =

{

1, 2, 3,

4,

5, 6, 7

};

1 2 3

4 5 6

7 0 0

0 0 0

0 0 0

static int example[5][3] =

{

{ 1, 2, 3 },

{ 4 },

{ 5, 6, 7 }

};

1 2 3

4 0 0

5 6 7

0 0 0

0 0 0


Initializing multi dimensional arrays

Initializing Multi-Dimensional Arrays

static int example[][3][2] =

{

{ {1, 1}, {2, 2}, {3,3} },

{ {4, 4}, {5, 5}, {6,6} },

{ {1, 1}, {2, 2}, {3,3} },

{ {4, 4}, {5, 5}, {6,6} }

};

4-by-3-by-2 array


Arrays of pointers

Arrays of Pointers

char *fortunes[] =

{

"Soon, you will come into some money.\n",

"A new love will enter your life.\n",

"You will live long and prosper.\n",

"Now is a good time to invest for the future.\n",

"A close friend will ask for a favor.\n"

};

cout << fortunes[1] << endl << fortunes<<endl

<< *(fortunes) << endl << *(fortunes[2]) << endl;

  • Output:

    A new love will enter your life

    0012FFC6

    Soon, you will come into some money

    Y


Arrays of pointers1

Arrays of Pointers …

  • Two dimensional string pointers e.g. C++ dictionary

    char *keyword[][2] =

    {

    "for", "for(initialization; condition; increment)",

    "if", "if(condition) ... else ...",

    "switch", "switch(value) { case-list }",

    "while", "while(condition) ...",

    // add the rest of the C++ keywords here

    "", "" // terminate the list with nulls

    };

    int main()

    {

    char str[80];

    int i;

    cout << "Enter keyword: ";

    cin >> str;

    for(i=0; *keyword[i][0]; i++)

    if(!strcmp(keyword[i][0], str))

    cout << keyword[i][1];

    return 0;

    }


Array of strings vs array of pointers

Array of Strings vs. Array of Pointers

  • each column is 20 characters wide due to the longest movie name

  • wasted space

  • the strings are placed contiguously in memory without wasting space

  • pointers in the array movie point to them

  • char movies[5][20] =

    {“Godfather”,

    “Maula Jatt”,

    “A Fish Called Wanda”,

    “Blade Runner”,

    “Spiderman”};

  • char *movies[5] =

    {“Godfather”,

    “Maula Jatt”,

    “A Fish Called Wanda”,

    “Blade Runner”,

    “Spiderman”};


Cs 192

Dynamic Allocation

The new operator

int *x_ptr = new int;

OR

int *xptr;

xptr = new int;

//heap


Cs 192

Dynamic Allocation

int *xptr=new int;

*xptr = 73;

int *x2ptr = new int;

*x2ptr = 65;


Cs 192

Dynamic Allocation

What is wrong here?

int *xptr = new int;

*xptr = 73;

int *x2ptr;

*x2ptr=65;


Cs 192

Dynamic Allocation

int *xptr = new int;

*xptr = 73;

int *x2ptr;

x2ptr = xptr;

*x2ptr = 65;


Cs 192

Dynamic Allocation

//What is wrong here?

int *xptr = new int;

*xptr = 73;

int *x2ptr = new int;

x2ptr = xptr;

*x2ptr = 65;

//memory leak


Cs 192

Dynamic Allocation

int *myptr = new int(73);

cout << *myptr;

delete myptr;


Cs 192

Dynamic Allocation

const int SIZE = 10;

double *ptr = new double[SIZE]; /*10 element array*/

int i;

for (i=0; i<SIZE; i++)

{

ptr[i] = 2.0*i;

}

for (i=0; i<SIZE; i++)

{

cout << ptr[i] << endl;

}

delete []ptr;


Array of pointers

0 1 2 3 4 5

iarray

0

1

2

3

Array of Pointers

A two dimensional array of RSIZE*CSIZE

const int RSIZE = 4;

const int CSIZE = 6;

int * iarray[RSIZE];

for(int k=0; k<RSIZE; k++)

{

iarray[k] = new int [CSIZE];

if (iarray[k] == NULL)

{

cerr << “Memory Allocation Error…\n”;

cerr << “Exiting …\n”;

exit(-1);

}

}


Double and tripple pointers

300

200

100

20

ippp

ipp

ip

a

400

300

200

100

Double and Tripple Pointers

int a = 20;

int *ip = &a;

int **ipp = &ip;

int ***ippp = &ipp;

cout << a << endl;

cout << ip << *ip << endl;

cout << ipp << *ipp << **ipp << endl;

cout << ippp << *ippp << **ippp << ***ippp << endl;

20

100 20

200 100 20

300 200 100 20


Dynamic array of pointers

Dynamic Array of Pointers

A two dimensional array of RSIZE*CSIZE

const int RSIZE = 4;

const int CSIZE = 6;

int ** matrix;

matrix = new int * [RSIZE];

for(int k=0; k<RSIZE; k++)

{

matrix[k] = new int [CSIZE];

if (matrix[k] == NULL)

{

cerr << “Memory Allocation Error…\n”;

cerr << “Exiting …\n”;

exit(-1);

}

}

matrix

0 1 2 3 4 5

0

1

2

3


  • Login