Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Addressing Concept
Pointer stores the address of another entity It refers to a memory location
int i = 5; int *ptr; ptr = &i; printf(*ptr = %d\n, *ptr); /* declare a pointer variable */ /* store address-of i to ptr */ /* refer to referee of ptr */
int i = 5; int *ptr; ptr = &i; printf(i = %d\n, i); printf(*ptr = %d\n, *ptr); printf(ptr = %p\n, ptr);
ptr
i
Output:
i = 5 *ptr = 5 ptr = 65522
address of i
5
value of ptr = address of i in memory
4
Twin Operators
Twin Operators
*: De-reference operator
j = 5;
} Void main() { int i = 3; f(i); Printf(%d,i) } }
*ptr = 5;
Void main() { int i = 3;
i=?
f(&i); }
i=?
i=3
i=5
7
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
int
integer variable
10
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2; /* declare a pointer-to-integer variable */
j
ptr
int
int *
integer variable
integer pointer variable
10
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2; /* declare a pointer-to-pointer-to-integer variable */
j
ptr pptr
int
int *
integer variable
integer pointer variable
10
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2; /* store address-of i to ptr */
j
ptr pptr *ptr
int
int * int
integer variable
integer pointer variable de-reference of ptr
10
address of i 5
11
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; /* store address-of ptr to pptr */ *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
j
ptr pptr *pptr
int
int * int *
integer variable
integer pointer variable de-reference of pptr
10
address of i address of ptr value of ptr (address of i)
12
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
j
ptr pptr *ptr
int
int * int
integer variable
integer pointer variable de-reference of ptr
10
address of i address of ptr 3
13
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
j
ptr pptr **pptr
int
int * int
integer variable
integer pointer variable de-reference of de-reference of pptr
10
address of i address of ptr 7
14
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
j
ptr pptr *ptr
int
int * int
integer variable
integer pointer variable de-reference of ptr
10
address of j address of ptr 10
15
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
j
ptr pptr **pptr
int
int * int
integer variable
integer pointer variable de-reference of de-reference of pptr
9
address of j address of ptr 9
16
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
j
ptr pptr *pptr
int
int * int *
integer variable
integer pointer variable de-reference of pptr
9
address of i address of ptr value of ptr (address of i)
17
An Illustration
int i = 5, j = 10;
int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
j
ptr pptr *ptr
int
int * int
integer variable
integer pointer variable de-reference of ptr
9
address of i address of ptr -2
18
Pointer Arithmetic
Whats ptr + 1?
The The
next memory location! Whats ptr - 1? previous memory location! Whats ptr * 2 and ptr / 2?
Invalid
operations!!!
19
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value ? ? ? ? ?
20
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value ? ? ? ? address of a[2] ?
21
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value ? ? 3.14 ? address of a[2] 3.14
22
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value ? ? 3.14 ? address of a[3] ?
23
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value ? ? 3.14 9.0 address of a[3] 9.0
24
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value ? ? 3.14 9.0 address of a[0] ?
25
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value 6.0 ? 3.14 9.0 address of a[0] 6.0
26
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value 6.0 ? 3.14 9.0 address of a[2] 3.14
27
Data Table Name a[0] a[1] a[2] a[3] ptr *ptr Type float float float float float Description float array element (variable) float array element (variable) float array element (variable) float array element (variable) de-reference of float pointer variable Value 6.0 ? 7.0 9.0 address of a[2] 7.0
28
ptr++;
*ptr = 9.0; ptr = ptr - 3; *ptr = 6.0;
ptr += 2;
*ptr = 7.0;
29
Addr Content 1000 1004 1008 a[0]: 37.9 a[1]: 1.23 a[2]: 3.14
Addr Content 1000 1004 1008 a[0]: 37.9 a[1]: 1.23 a[2]: 3.14
Pros
Cons
32
Summary
A pointer stores the address (memory location) of another entity Address-of operator (&) gets the address of an entity De-reference operator (*) makes a reference to the referee of a pointer Pointer and array Pointer arithmetic
33