Pointer
This presentation is the property of its rightful owner.
Sponsored Links
1 / 27

Pointer PowerPoint PPT Presentation


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

Pointer. Tran, Van Hoai. Pointers and Addresses. Pointer: group of cells ( 2,4 cells ) Variable: group of cells Pointer is also a variable Each cell (or group of cells) has an address. Pointer. Variable. p. c. Memory cells. Pointers and Addresses.

Download Presentation

Pointer

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


Pointer

Pointer

Tran, Van Hoai


Pointers and addresses

Pointers and Addresses

  • Pointer: group of cells (2,4 cells)

    • Variable: group of cells

    • Pointer is also a variable

  • Each cell (or group of cells) has an address

Pointer

Variable

p

c

Memory cells


Pointers and addresses1

Pointers and Addresses

  • &: get address of an object in memory

    • The address of a pointer &p

p

c

Memory cells

// assign the address of c to the variable p

p = &c;


Variable in memory

Variable in memory


Pointer variable in memory

Pointer, Variable in memory


Dereference

Dereference

  • How to access the object the pointer points to?

    • *: derefererencing operator

    • *p and c access the same object

      • If p points to c, *p can occur in any context where c could do

p

c


Example

Example

  • int *ip;

    • intended as a mnemonic (dễ nhớ)

    • implying *ip is an int

/* how to declare */

int x=1, y=2;

int *ip; /* ip is pointer to int */

/* how to use */

ip = &x; /* ip points to x */

y = *ip; /* y is now valued to that */

/* of x, i.e., 1 */

*ip = 0; /* x is now 0 */


More examples

More examples

/* how to declare */

int x=1, y=2;

int *ip; /* ip is pointer to int */

int **ipp; /* ipp is a pointer to int* */

/* how to use */

ip = &x; /* ip points to x */

*ip += 1; /* x is now 2 */

ipp = &x;/* invalid */

ipp = &ip; /* ipp points to ip */

**ipp = 5; /* x is now 5 */

*ipp = 2; /* invalid */

*ipp = &y; /* ip points to y */

**ipp = 3; /* y is now 3 */


Function arguments without pointer

Function arguments without pointer?

  • WRONG

    • After swap(a,b), a is still 1, b still 2

  • C passes arguments to functions by value

    • only swap copies of a and b

/* callee */

void swap( int x, int y )

{

int temp;

temp = x;

x = y;

y = temp;

}

/* caller */

int a=1, b=2;

swap( a, b );


Why it does not work

caller

1

a

2

b

passing values

swap() (before actions)

swap() (after actions)

1

2

x

x

swapping values

2

1

y

y

Why it does not work?

  • No way to return new values to a and b


How to swap values of a and b

How to swap values of a and b?

  • Pointers passed to function

  • Actions performed indirectly on variables of caller

/* callee */

void swap( int *px, int *py )

{

int temp;

temp = *px;

*px = *py;

*py = temp;

}

/* caller */

int a=1, b=2;

swap( &a, &b );


Why it works

Why it works?

  • px points to a

  • Accessing *px means accessing a

caller

a

b

swap()

px

py


Another way to return results to caller

Another way to return results to caller?

  • Through return mechanism

  • How to return more than 1 outputs?

    • arguments

/* n! */

int factorial( int n )

{

int i, f=1;

for( i=1; i<=n; i++ )

f *= i;

return f;

}

int factorial( int *fac, int n )

{

int i;

*fac = 1;

if ( n<0 ) return 0;

for( i=1; i<=n; i++ )

*fac *= i;

return 1;

}


Array and pointer

Array and Pointer

int x=2;

int *p; /* a pointer to int */

int a[5]; /* array of 5 ints */

a[2]=x; /* a[2] is 2 */

p=&a[2]; /* p points to 3rd element of a */

*(p+2)=3; /* a[4] is 3 now */

p=a; /* p points to a[0] */

a=p;/* invalid */

a

2

3

a[0]

a[2]

a[4]

x

2

p


Pointer to pointer syntactic meaning

Pointer to Pointer(syntactic meaning)

  • What is the meaning of

    void myFunction( int **ipp )

    {

    }

  • Think syntactically in step

    • ipp points to int* which points to int


Pointer to pointer semantic meaning 1

Pointer to Pointer (semantic meaning) (1)

/* ip: pointer to int */

/* n: length of array */

/* elm: element to be inserted */

int insert( int *ip, int n, int elm )

{

int i, j;

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

if ( ip[i] > elm ) /* insert position here */

break;

if ( i<n ) /* move the rest forward */

for( j=n-1; j>=i; j-- ) /* 1 unit if needed */

ip[j+1] = ip[j];

ip[i] = elm; /* safe to insert now */

return n+1;

}

  • Challenge

    • How to pass an array of ints to a function

    • The function inserts an int into the array


Pointer to pointer semantic meaning 2

Pointer to Pointer(semantic meaning) (2)

/* ipp: pointer to pointer */

/* s: size of array */

int insert( int **ipp, int *n, int *s, int elm )

{

int i, j, *p;

if ( n+1 > s ){ /* re-allocate mem. if needed */

p = (int*)calloc( n+1, sizeof(int) );

memcpy( p, *ipp, n*sizeof(int) );

free( *ipp ); *ipp = p;

}

for( i=0; i<n; i++ ) /* find position to insert */

if ( p[i] > elm )

break;

if ( i<n ) /* move the rest forward */

for( j=n-1; j>=i; j-- ) /* 1 unit if needed */

p[j+1] = p[j];

p[i] = elm; /* safe to insert now */

n = n+1; s = s+1; /* update new length and size */

return n+1;

}

  • The function increase the size of the array if needed


Pointer to function

Pointer to Function

  • In C, function is not a variable

  • But pointer to function is possible

    • To be assigned

    • To be placed in arrays

    • To be passed to functions

    • To be returned by functions


How to declare

How to declare

  • There are similar functions

    • int intLeast(void *p,int n,void *e)

    • int doubleLeast(void *p,int n,void *e)

  • Pointer variable to functions

    • int (*pLeast)(void *,int,void *e);

    • Assignment

      pLeast = intLeast;

    • Usage

      (*pLeast)( …, …, … )


Where to use for example

Where to use (for example)?

  • Look into example4.c


Confusion

Confusion

  • int *f()

    • function returning a pointer to int

  • int (*f)()

    • pointer to function returning int


Examples

Examples

/* argv: pointer to string */

char **argv

/* daytab: pointer to array[13] of int */

int (*daytab)[13]

/* daytab: array[13] of pointers to int */

int *daytab[13]

/* comp: function returning pointer to void */

void *comp()

/* comp: function to pointer returning void */

void (*comp)()


Memory organization

Memory organization

Tran, Van Hoai


Three types

Three types

  • Automatic storage (stack)

  • Static storage

  • Free storage (heap)


Stack

Stack

  • Used for

    • Local objects

      • not explicitly declared static or extern

      • declared auto or register

      • function arguments

  • Created automatically on stack when entering, Destroyed when exiting a block or function

  • Default value: indeterminate (không xác định)


Static

Static

  • Used for

    • Global, static (in functions) objects

  • Created once, existing during program execution

  • Default value: binary zero


Heap dynamic

Heap (dynamic)

  • Used for

    • dynamic memory allocation

      • calloc(),malloc(), free()

  • Created, Destroyed explicitly in user C code

  • Default value: unspecified


  • Login