applications of pointers (1a)€¦ · 17/04/2018  · 4/17/18 two more ways to access a : *p, **q...

59
Young Won Lim 4/17/18 Applications of Pointers (1A)

Upload: others

Post on 27-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Young Won Lim4/17/18

Applications of Pointers (1A)

Page 2: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Young Won Lim4/17/18

Copyright (c) 2010 - 2018 Young W. Lim.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

Please send corrections (or suggestions) to [email protected].

This document was produced by using LibreOffice.

Page 3: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

3 Young Won Lim4/17/18

Variables and their addresses

&a

data

int a; a

address

int * p;

int **q;

&p p

&q q

Page 4: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

4 Young Won Lim4/17/18

Initialization of Variables

&a

data

int a = 100; a = 100

address

int * p = &a;

int **q = &p;

&p p = &a

&q q = &p

Page 5: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

5 Young Won Lim4/17/18

Traditional arrow notations

&a

data

a = 100

address

&p p = &a

&q q = &p

&a

data

a = 100

address

&p p = &a

&q q = &p

Page 6: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

6 Young Won Lim4/17/18

Pointed addresses : p, q

p

data

int a; a

address

int * p = &a;

int **q = &p;

q p

&q q

p = &aq = &p

Page 7: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

7 Young Won Lim4/17/18

Dereferenced Variables : *p

p

data

int a; *p

address

int * p = &a;

int **q = &p;

&p p

*p ≡ a

Page 8: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

8 Young Won Lim4/17/18

Dereferenced Variables : *p

int a;

int * p = &a;

int **q = &p;

p = &a *p ≡ a

p ≡ &a*(p) ≡ *(&a)* p ≡ a

Addressassignment

Variablealiasing

Relations after address assignment

Page 9: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

9 Young Won Lim4/17/18

Dereferenced Variables : *q, **q

*q

data

int a; **q

address

int * p = &a;

int **q = &p;

q *q

&q q

**q ≡ a

*q ≡ p

Page 10: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

10 Young Won Lim4/17/18

Dereferenced Variables : *q, **q

int a;

int * p = &a;

int **q = &p; q = &p *q ≡ p

p = &a *p ≡ a

Addressassignment

Variable aliasing

q ≡ &p*(q) ≡ *(&p)* q ≡ p**q ≡ *p**q ≡ a

**q ≡ a

Relations after address assignment

Page 11: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

11 Young Won Lim4/17/18

Two more ways to access a : *p, **q

*q **q

q *q

&q q

**q ≡ a

p *p

&p p

&q q

*p ≡ a

&a a

&p p

&q q

a

Page 12: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

12 Young Won Lim4/17/18

Two more ways to access a : *p, **q

**q

*p

&a

data

a

address

&p p

&q q

1) Read / Write a2) Read / Write *p3) Read / Write **q

Page 13: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

13 Young Won Lim4/17/18

Variables

&a

data int a;

a can hold an integer a

address

&a

a = 100;

a holds 100a 100

dataaddress

Page 14: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

14 Young Won Lim4/17/18

Pointer Variables

&p

int * p; *p holds a int type data

pint * p;

pointer to int

int

int * p;

p can hold an address

*p

p holds an addressof a int type data

p

Page 15: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

15 Young Won Lim4/17/18

Pointer to Pointer Variable

&q

int **q; **q holds a int type data

q

int * *q; *q holds an address of a int type data

pointer to int

int

int ** q;

q holds an address

int ** q; q holds an address of a pointer to int type data

pointer to pointer to int

*qq

*q **q

Page 16: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

16 Young Won Lim4/17/18

Pointer Variables Examples

int a = 200;

int * p = & a;

int ** q = & p; &q 0x3CE q

dataaddress

0x3A0

*q 0x3A0

0x3AB

q 0x3AB

&q 0x3CE

= 0x3AB

2000x3A0

p

**q 200

0x3A0

&p

&a a

Page 17: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

17 Young Won Lim4/17/18

Pointer Variable p with an arrow notation

dataaddress

p

*p

&p

p

200

p 0x3A0

&p 0x3AB

*p

dataaddress

0x3A00x3AB

2000x3A0

p&p

&a a

using an arrow notation

Page 18: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

18 Young Won Lim4/17/18

Pointer Variable q with an arrow notation

dataaddress

*q 0x3A0

q 0x3AB

&q 0x3CE

**q 200

0x3A0

q

*q

**q

&q

q

*q

&q 0x3CE q

dataaddress

0x3A00x3AB

= 0x3AB

2000x3A0

p&p

&a a

using an arrow notation

Page 19: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

19 Young Won Lim4/17/18

The type view point of pointers

(int)

(int *)

(int **)

Types

address

data

address

Page 20: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

20 Young Won Lim4/17/18

The different view points of pointers

(int)

(int *)

(int **)

**q

*q

q

Types Variables

q

*q

&q

Addresses

Page 21: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

21 Young Won Lim4/17/18

Single and Double Pointer Examples (1)

int a ;

int *p ;

int **q ;

*p

a

*q

**q

q

p

p

q

*q

a, *p, and **q: int variables

Page 22: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

22 Young Won Lim4/17/18

Single and Double Pointer Examples (2)

int a ;

int * p ;

int * *q ;

*p

a

*q

**q

q

p

p

q

*q

p and *q : int pointer variables(singlepointers)

Page 23: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

23 Young Won Lim4/17/18

Single and Double Pointer Examples (3)

int a ;

int * p ;

int ** q ;

*p

a

*q

**q

q

p

p

q

*q

q : double int pointer variables

Page 24: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

24 Young Won Lim4/17/18

Values of double pointer variables

(int)

(int *)

(int)

(int **)

X

(float *)

(float)

X

(int **)

int ** p, **q ;

p = q;

Page 25: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

25 Young Won Lim4/17/18

Pointed Addresses and Data

a =100&aint a ;

The variable a holds an integer data

p&pint * p ;

The pointer variable p holds an address,at this address, an integer data is stored

200

q&qint * * q ;

The pointer variable q holds an address,at the address q, another address *q is stored, at the address *q, an integer data **q is stored

*q 30

Page 26: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

26 Young Won Lim4/17/18

Dereferencing Operations

a =100&aint a

int * p

int * * q

p&p *p=200 p

q&q *q **q=30 q *q

*(&a) = a

*(&p) = p *(p) = *p

*(&q) = q *(q) = *q *(*q) = **q

*

*

*

*

* *

Page 27: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

27 Young Won Lim4/17/18

Direct Access to an integer a

a =100&aint a ;

&avalue

a address

integerDirect Access

1 memory access

Page 28: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

28 Young Won Lim4/17/18

Indirect Access *p to an integer a

p&pint * p ; *p=200

&pvalue

paddress

p *p

Indirect Access

Dereference Operator *

the content of the pointed location

p

2 memory accesses

Page 29: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

29 Young Won Lim4/17/18

Double Indirect Access **q to an integer a

q&qint * * q ; *q **q=30

&qvalue

qaddress

q *q

*q **q

Double Indirect Access

Dereference Operator *

the content of the pointed location

Dereference Operator *

the content of the pointed location

q *q

3 memory accesses

Page 30: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

30 Young Won Lim4/17/18

Values of Variables

a =100&aint a ;

int * p ;

int * * q ;

&avalue

a address

&pvalue

paddress

p *p

&qvalue

qaddress

q *q*q **q

integer

address

integer

address

integer

address

p&p *p=200 p

q&q *q **q=30 q *q

Page 31: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

31 Young Won Lim4/17/18

Swapping pointers- pass by reference- double pointers

Page 32: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

32 Young Won Lim4/17/18

p = &a

q = &b

p = &b

q = &a

Swapping integer pointers

&p

&q

&p

&q

a = 111

b = 222

a = 111

b = 222

Page 33: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

33 Young Won Lim4/17/18

Swapping integer pointers

p = &a

q = &b

&p

&q

p = &b

q = &a

&p

&q

swap_pointers( &p, &q );

swap_pointers( int **, int ** );

function call

function prototype

int *p, *q;

Page 34: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

34 Young Won Lim4/17/18

Pass by integer pointer reference

void swap_pointers (int **m, int **n){

int* tmp;

tmp = *m; *m = *n;

*n = tmp;}

int a, b; int *p, *q; p=&a, q=&b;

… swap_pointers( &p, &q );

int ** mint * *m

int * tmp

int ** nint * *n

Page 35: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

35 Young Won Lim4/17/18

Array of Pointers

Page 36: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

36 Young Won Lim4/17/18

Array of Pointers

int a [4];

int No. of elements = 4

int * b [4];

a [4]

Type of each element

int * No. of elements = 4

b [4]

Type of each element

Page 37: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

37 Young Won Lim4/17/18

Array of Pointers – variable view

int a [4]; int * b [4];

a[0] a[1]

a[2] a[3]

b[0] b[1]

b[2] b[3]

a b

b[0]

b[1]

b[2]

b[3]

*b[0]

*b[1]

*b[2]

*b[3]

= 11

= 22

= 33

= 44

= 11= 22

= 33= 44

a[0] a[1]

a[2] a[3]

Page 38: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

38 Young Won Lim4/17/18

Array of Pointers – type view

int a [4]; int * b [4];

(int) (int)

(int) (int)

(int *) (int *)

(int *) (int *)

(int)

(int)

(int)

(int)

(int *) (int * *)

Page 39: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

39 Young Won Lim4/17/18

Pointer to Arrays

Page 40: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

40 Young Won Lim4/17/18

Pointer to an array – variable declarations

int (*p) [4]

int a [4] int func (int a, int b) ;

int (* fp) (int a, int b) ;

int m ;

int *n ;

an integer pointer

an integer array pointer a function pointer

Page 41: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

41 Young Won Lim4/17/18

Pointer to an array – type view

an integer pointer

an integer array pointer a function pointer

int

int *

int []

int (*) [4]

int (int, int)

int (*) (int, int)

Page 42: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

42 Young Won Lim4/17/18

Pointer to an Array : Assignment and Dereference

(*p) &(*p) p

sizeof(p)= 4 bytes

sizeof(*p)= 16 bytes

int (*p) [4]

int a [4] a &a &a

dereference assignment

Page 43: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

43 Young Won Lim4/17/18

Pointer to an array – a variable view

int (*p) [4];

a[0] a[1]

a[2] a[3]

a

p

&a

p = &a

an array pointer points to an array – a aggregated type data

Page 44: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

44 Young Won Lim4/17/18

Pointer to an array – a aggregated type view

a[0] a[1]

a[2] a[3]

a

p

&a

p = &a

a[0] a[1]

a[2] a[3]

a

p

p

p = &a

int (*p) [4];An aggregated type - starting address (&a) - size of all the array elements (16 bytes)

Page 45: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

45 Young Won Lim4/17/18

Pointer to an array – incrementing a pointer

a[0] a[1]

a[2] a[3]

ap p

p+1

addr(p+1) - addr(p) = (long) (p+1) - (long) (p) = 4 * sizeof(int)

int (*p) [4];

Page 46: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

46 Young Won Lim4/17/18

Pointer to an array – dereferencing

int a [4];

a[0] a[1]

a[2] a[3]

a

p

&a

(*p)[0] (*p)[1]

(*p)[2] (*p)[3]

p

p *p

int (*p) [4] = &a;

p = &a

*p ≡ a

Page 47: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

47 Young Won Lim4/17/18

Pointer to an array – a type view

(int) (int)

(int) (int)

(int *)

(int (*)[4])

(int) (int)

(int) (int)

(int *)

(int (*)[4])

(int) (int)

(int) (int)

(int *)

(int (*)[4])

(int) (int)

(int) (int)

(int [4])

(int (*)[4])

(int []) (int *)

int a [4]; int (*p) [4] = &a;

Page 48: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

48 Young Won Lim4/17/18

Double pointer to array – type

(int) (int)

(int) (int)

(int *)

(int (*)[4])

(int) (int)

(int) (int)

(int [4])

(int (*)[4])

(int (*)[4]) (int (**)[4])

≡ (int []) ≡ (int *)

a pointer to an array

a pointer to a pointer to an array

a pointer to an int

Page 49: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

49 Young Won Lim4/17/18

Series of pointers to an array – type

(int) (int)

(int) (int)

(int *) (int) (int)

(int) (int)

(int *)

(int *) (int (*)[4]) (int [4]) (int *) (int [4]) (int *) (int [4]) (int *) (int [4]) (int *) (int [4]) (int *) (int [4])

a pointer to an int

a pointer to an array an int array name

an int array name

an int array name

(int (*)[4]) (int (*)[4])

Page 50: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

50 Young Won Lim4/17/18

Pointer to the series of arrays – type

(int) (int)

(int) (int)

(int) (int)

(int) (int)

(int *) (int (*)[4]) (int [4]) (int (*)[4]) (int *) (int [4]) (int *) (int [4]) (int *) (int [4]) (int *) (int [4]) (int *) (int [4])

(int) (int)

(int) (int)

(int) (int)

(int) (int) (int) (int)

(int) (int)

(int) (int)

(int) (int)

int [4] ≡ int [ ] ≡ int *

4 in [4] is meaningful only in the array declaration– the number of array elements

Page 51: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

51 Young Won Lim4/17/18

Array pointers and 2-d arrays

c[0] c[1]c[2] c[3]

(int [])

(int [])

(int [])

(int [])

c(int (*) [4])

(int)

(int)

(int)

(int)

c[0][0] c[0][1] c[0][2] c[0][3]

(int)

(int)

(int)

(int)

c[1][0] c[1][1] c[1][2] c[1][3]

(int)

(int)

(int)

(int)

c[2][0] c[2][1] c[2][2] c[2][3]

(int)

(int)

(int)

(int)

c[3][0] c[3][1] c[3][2] c[3][3]

a 2-d array with 4 rows and 4 columns

array name a of a 2-d arrayas an array pointer to the lower dimensional 1-d array

pointer to the 4 element 1-d array

pointer to the aggregated data structure

the 2-d array name c points to the starting address of the aggregated data structurewhose size is (4 * sizeof(int))

c + 1 advance address by (4 * sizeof(int))

the total size of the aggregated data structure

Page 52: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

52 Young Won Lim4/17/18

Pointer to a 1-d array

p[0] p[1] p[2] p[3]

c(int (*) [4])

p[0][0] p[0][1] p[0][2] p[0][3] p[1][0] p[1][1] p[1][2] p[1][3] p[2][0] p[2][1] p[2][2] p[2][3] p[3][0] p[3][1] p[3][2] p[3][3]

p&p

a 2-d array with 4 rows and 4 columns

p

p[0]

p[1]

p[2]

p[3]

(int (*) [4])

int c[4] [4]

int (*p) [4] ;

p = &c[0];

Page 53: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

53 Young Won Lim4/17/18

(*q)[0] (*q)[1] (*q)[2] (*q)[3]

c(int (*) [4])

(*q)[0][0] (*q)[0][1] (*q)[0][2] (*q)[0][3] (*q)[1][0] (*q)[1][1] (*q)[1][2] (*q)[1][3] (*q)[2][0] (*q)[2][1] (*q)[2][2] (*q)[2][3] (*q)[3][0] (*q)[3][1] (*q)[3][2] (*q)[3][3]

a 2-d array with 4 rows and 4 columns

p

(*p)[0]

(*p)[1]

(*p)[2]

(*p)[3]

Pointer to a 2-d array

q&p

q = &c;

(int(*)[4][4])

int c

int (*q) [4][4] ;

[4][4] ;

Page 54: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

54 Young Won Lim4/17/18

Pointer to a 1-d array

c[0]

c[1]

c[2]

c[3]

(int [])

(int [])

(int [])

(int [])

(int)

(int)

(int)

(int)

c[0][0] c[0][1] c[0][2] c[0][3]

(int)

(int)

(int)

(int)

c[1][0] c[1][1] c[1][2] c[1][3]

(int)

(int)

(int)

(int)

c[2][0] c[2][1] c[2][2] c[2][3]

(int)

(int)

(int)

(int)

c[3][0] c[3][1] c[3][2] c[3][3]

c(int (*) [4])

p&p (int (*) [4])

Page 55: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

55 Young Won Lim4/17/18

Pointer to a 2-d array

c(int (*) [4])

p&p (int(*)[4][4])

*(p+0)

*(p+1)

*(p+2)

*(p+3)

*(*(p+0)+0)*(*(p+0)+1)*(*(p+0)+2)*(*(p+0)+3)*(*(p+1)+0)*(*(p+1)+1)*(*(p+1)+2)*(*(p+1)+3)*(*(p+2)+0)*(*(p+2)+1)*(*(p+2)+2)*(*(p+2)+3)*(*(p+3)+0)*(*(p+3)+1)*(*(p+3)+2)*(*(p+3)+3)

Page 56: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

56 Young Won Lim4/17/18

Pointer to array (3)

p&p

p = c

(*p) [ i ][ j ];

int c[4] [4]

int (*p) [4] ;*(p+0)p+0

*(p+1)p+1

*(p+2)p+2

*(p+3)p+3

Page 57: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

57 Young Won Lim4/17/18

Pointer to array (3)

p[0] p[1] p[2] p[3]

(int [])

(int [])

(int [])

(int [])

c(int (*) [4]) int c[4] [4]

(int)

(int)

(int)

(int)

p[0][0] p[0][1] p[0][2] p[0][3]

(int)

(int)

(int)

(int)

p[1][0] p[1][1] p[1][2] p[1][3]

(int)

(int)

(int)

(int)

p[2][0] p[2][1] p[2][2] p[2][3]

(int)

(int)

(int)

(int)

p[3][0] p[3][1] p[3][2] p[3][3]

int (*p) [4] ;

p&p

a 2-d array with 4 rows and 4 columns

p

p[0]

p[1]

p[2]

p[3]

(int (*) [4])

(*p) [ i ][ j ];

Page 58: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Series : 5. Applications of Pointers

58 Young Won Lim4/17/18

Pointer to array (4)

int c [4][4];int (*p) [4];

p = c;

func(p, ... );

void func(int (*x)[4], ... ){

x[r][c] =

}

void func(int x[ ][4], ... ){

x[r][c] =

}

Page 59: Applications of Pointers (1A)€¦ · 17/04/2018  · 4/17/18 Two more ways to access a : *p, **q **q *p &a data a address &p p &q q 1) Read / Write a 2) Read / Write *p 3) Read

Young Won Lim4/17/18

References

[1] Essential C, Nick Parlante[2] Efficient C Programming, Mark A. Weiss[3] C A Reference Manual, Samuel P. Harbison & Guy L. Steele Jr.[4] C Language Express, I. K. Chun