You are on page 1of 10

8831 llaF ytisrevinU zarihS gnireenignE retupmoC dna lacirtcelE fo tnemtrapeD

C ni gnimmargorP fo selpicnirP

Pointers to Array Elements

imizA azeR

Pointers and Arrays

int *q; int array[100]; q = &array[2]; *q = i;

int *p, i; p = &i;

1
2

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

ypoc

.yarra eht ni tnemele tsrif eht ot retniop a sa desu eb nac eman yarrA

list

But Array Name is not an lvalue

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

ypoc

Array Name as a Pointer Value

!eman syarra na ot etirw tonnac uoY :GNORW


int *q, i; int list[100]; q = &i; list = q;

list

int int q = i =

*q, i; list[100]; list; *list;

2
4

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

!setyb 4 ton ,)setyb 61( s 4 yb decnavda si :ETON

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

Pointer Arithmetic (

Pointer Arithmetic (

int

p = &a[0]; p += 4;

p = &a[0];

int a[100]; int *p, *q, i;

int a[100]; int *p, *q, i;

3
6

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

...

Pointer Arithmetic (

)
int a[100]; int *p, *q, i; p = &a[0]; p += 4; p -= 1;

Pointer Arithmetic (

)
int a[100]; int *p, *q, i; p = a + 3; q = p + 2;

7 8

... ...
imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

?gnorw stahW

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

...
a p q p = a + 3; q = p + 2; i = q p;

!8 ton ,2 eb lliw :ETON

Pointer Arithmetic (

Pointer Arithmetic (

p = a + 100; *p = 10;

int a[100]; int *p, *q, i;

int a[100]; int *p, *q, i;

5
01

99

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP 3 2 1 0

...

Example: Summing Up Array Elements


#define N 10 int a[N], sum, *p; sum = 0; for (p = a; p < &a[N]; p++) { sum += *p; }
]koob sgniK eht morf nekat elpmaxe[

Example: Summing Up Array Elements


#define N 10 int a[N], sum, *p; sum = 0; for (p = a; p < &a[N];) { sum += *p++; }
]koob sgniK eht morf nekat elpmaxe[

11 21

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

Example: Summing Up Array Elements


#define N 10 int a[N], sum, *p; sum = 0;

for (p = a; p < &a[N];) { sum += *++p; }


]koob sgniK eht morf nekat elpmaxe[

Array Arguments (Revisited)


#define BUFFER_SIZE 100 double buffer[BUFFER_SIZE]; void init(double array[], int n) { int i; for (i = 0; i < n; i++) array[i] = 100.0; } int main() { init(buffer, BUFFER_SIZE);

?eno siht htiw gnorw stahW


31 41

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

51

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

Pointers and 2D Arrays

int main() { init(buffer, BUFFER_SIZE);

void init(double *array, int n) { int i; for (i = 0; i < n; i++) array[i] = 100.0; }

#define BUFFER_SIZE 100 double buffer[BUFFER_SIZE];

Array Arguments (Revisited)

int a[N][M];

8
61

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

... 1-N wor ]1-M[]1-N[a 1 wor 0 wor ]0[]1-N[a

]2[]3[a

]0[]1[a ]1-M[]0[a ]1[]0[a )M(snmuloC ]0[]0[a

)N( swoR

... 1-SWOR wor 1 wor 0 wor

71

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

]koob sgniK eht morf nekat elpmaxe[

... 1-SWOR wor 1 wor 0 wor

a[0]

for (p = a[1]; p < a[1]+ COLS; p++) { sum += *p; }

int a[ROWS][COLS]; int *p;

for (p = &a[0][0]; p <= &a[ROWS-1][COLS-1]; p++) { sum += *p; }

int a[ROWS][COLS]; int *p;

Processing Rows

Pointers and 2D Arrays

a[1]

a[i]

a[ROWS-1]

9
81

ko .i wor fo tnemele tsrif ]ehotb sgniK eht morf nekat elpmaxe[ ot retniop a sa desu eb nac

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

... i wor ]1-M[]1-N[a 1 wor 0 wor ]0[]1-N[a

]2[]3[a

91

ko .i wor fo tnemele tsrif ]ehotb sgniK eht morf nekat elpmaxe[ ot retniop a sa desu eb nac
for (p = &a[1][0]; p < &a[2][0]; p++) { sum += *p; }

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

... 1-SWOR wor 1 wor 0 wor

a[0]

int a[ROWS][COLS]; int *p;

Pointers and 2D Arrays

Processing Rows

a[1]

a[i]

int a[N][M]; int *p;

]1-M[]0[a

)M(snmuloC

i * M

/* a[i][j] = 100 */ p = a; p += i * M + j; *p = 100;

a[ROWS-1]

10
02

imizA azeR yb ,8831 llaF ,ytisrevinU zarihS ,selpicnirP gnimmargorP

]0[]1[a ]1[]0[a ]0[]0[a

)N( swoR

You might also like