applications of pointers (1a)€¦ · 17/04/2018 · 4/17/18 two more ways to access a : *p, **q...
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/15.jpg)
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
*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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/54.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/55.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/56.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/57.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/58.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052000/6012e4bb429f1f1c3b449390/html5/thumbnails/59.jpg)
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