main( ) 
{ 
int a[ ] = { 7, 9, 16, -2, 8 } ; 
a[0] a[1] a[2] a[3] a[4] 
7 9 16 -2 8 
102 104 106 108 110 
int i ; 
printf ( ”%u %u %u”, &a[ 0 ], &a[ 1 ], &a[ 2 ] ) ; 
printf ( ”%u %u %u”, a, a + 1, a + 2 ) ; 
printf ( ”%d %d %d”, *a, *( a +1 ), *( a + 2 ) ) ; 
for ( i = 0 ; i <= 4 ; i ++ ) 
printf ( ”%d”, *( a + i ) ) ; 
for ( i = 0 ; i <= 4 ; i ++ ) 
printf ( ”%d”, a[ i ] ) ; 
} 
102 104 106 
102 104 106 
7 9 16 
Another Form... 
Subscript 
Notation 
Pointer 
Notation
More Forms... 
main( ) 
{ 
int a[ ] = { 7, 9, 16, -2, 8 } ; 
int i ; 
for ( i = 0 ; i <= 4 ; i ++ ) 
printf ( ”%d”, a[ i ] ) ; 
for ( i = 0 ; i <= 4 ; i ++ ) 
printf ( ”%d”, *( a + i ) ) ; 
for ( i = 0 ; i <= 4 ; i ++ ) 
printf ( ”%d”, *( i + a ) ) ; 
for ( i = 0 ; i <= 4 ; i ++ ) 
printf ( ”%d”, i[ a ] ) ; 
} 
a[ i ] i[ a ] 
*( a + i ) *( i + a )
Flexible Arrays 
int a[ n ] ; 
scanf ( ”%d”, n ) ; 
Size of an array must always be mentioned 
as a positive, non-zero, integer constant
Pointer Arithmetic 
a 
b 
1008 2009 6002 
1012 
main( ) 
{ 
float a = 3.14 
, *b ; 
char ch = ’z’ 
, *dh ; 
int i = 25 
, *j ; 
b = a ; dh = ch ; j = i ; 
printf ( ”%u %u %u”, b, dh, j ) ; 
b++ ; dh++ ; j++ ; 
printf ( ”%u %u %u”, b, dh, j ) ; 
b += 3 ; dh += 8 ; j -= 3 ; 
printf ( ”%u %u %u”, b, dh, j ) ; 
} 
3.14 
ch i 
z 25 
1008 2009 6002 
1008 
dh j 
2009 6002 
1024 
2010 6004 
2018 5998
Legal Pointer Arithmetic 
Pointer + number 
Pointer - number 
Pointer - Pointer 
Pointer 
Pointer 
Number
Access Using Pointers 
main( ) 
{ 
int a[ ] = { 7, 9, 16, -2, 8 } ; 
int *p ; int i ; 
p = a ; /* same as a[ 0 ] */ 
printf ( ”%d”, *p ) ; p++ ; 7 
printf ( ”%d”, p ) ; 104 
printf ( ”%d”, *p ) ; 
9 
for ( i = 0 ; i = 4 ; i++ ) 
printf ( ”%d”, *p ) ; 
p++ ; 
{ 
} 
} 
a[0] a[1] a[2] a[3] a[4] 
7 9 16 -2 8 
102 104 106 108 110 
p p 
102 
104 
p++ 
* ++ p++ ; 
p 
Ist 
* ++p ; 
IInd Ist 
IInd 
++ *p ; 
p = a ;
main( ) 
{ 
[ ] For Notation... 
int a[ ] = { 7, 9, 16, -2, 8 } ; 
int *p ; int i ; 
p = a ; 
for ( i = 0 ; i = 4 ; i ++ ) 
printf ( ”%d %d %d %d”, 
} 
a[0] a[1] a[2] a[3] a[4] 
7 9 16 -2 8 
102 104 106 108 110 
*( p + i ), *( i + p ), 
p[ i ], i[ p ] ) ; 
int a[5] ; int 5[a] ; 
printf ( ”%d”, a[2] ) ; printf ( ”%d”, 2[a] ) ;  
int a[5] ; int 5[a] ; 
printf ( ”%d”, a[2] ) ; printf ( ”%d”, 2[a] ) ;
Dancing Dolls Revisited 
main( ) 
{ 
char far *s = 0xB8000000 ; int i ; 
for ( i = 0 ; i = 3999 ; i += 2 ) 
{ 
if ( *( s + i ) = ’A’  *( s + i ) = ’Z’ ) 
} 
} 
ss[[ ii ]] 
* ( i + s ) 
i[ s ] 
a[i] 
- One is pointer 
or array 
- Other is int
main( ) 
{ 
Changing Array Address 
int a[ ] = { 7, 9, 16, -2, 8 } ; 
int *p ; int i ; 
p = a ; 
for ( i = 0 ; i = 4 ; i ++ ) 
printf ( ”%d”, *p ) ; 
p++ ; 
{ 
} 
} 
for ( i = 0 ; i = 4 ; i ++ ) 
printf ( ”%d”, *a ) ; 
a++ ; 
{ 
} Error 
a[0] a[1] a[2] a[3] a[4] 
7 9 16 -2 8 
102 104 106 108 110 
a-- ; 
a = a + 2 ; 
a = a - 2 ; 
a += 2 ; 
a -= 2 ; 
a-- ; 
a = a + 2 ; 
a = a - 2 ; 
a += 2 ; 
a -= 2 ;
Passing Array Elements 
main( ) 
{ 
int a[ ] = { 7, 9, 16, -2, 8 } ; 
int i ; 
display ( a[ 0 ], a[ 1 ], a[ 2 ], a[ 3 ], a[ 4 ] ) ; 
for ( i = 0 ; i = 4 ; i++ ) 
display1 ( a[ i ] ) ; 
} 
display ( int i, int j, int k, int l, int m 
) 
{ 
printf ( ”%d %d %d %d %d”, i, j, k, l, m ) ; 
} 
display1 ( int n 
) 
{ 
printf ( ”%d”, n ) ; 
} 
Which 
is good? 
Which 
is good?
Passing Entire Array 
main( ) 
{ 
int a[ ] = { 7, 9, 16, -2, 8 } ; 
display2 ( a ) ; 
display3 ( a ) ; 
, sizeof ( a ) / 2 - 1 
} display2 ( i n t * p ) 
int i ; 
for ( i = 0 ; i = 4 ; i ++ ) 
printf ( ”%d”, ) ; 
} 
*( p + i ) 
{ 
display3 ( i n t * p , int n 
) 
{ 
i = n 
int i ; 
for ( i = 0 ; i = 4 ; i ++ ) 
} printf ( ”%d”, * ( p + i ) ) ; 
a[0] a[1] a[2] a[3] a[4] 
7 9 16 -2 8 
102 104 106 108 110 
qqssoorrtt (( aa,, 55,, ,, ,, )) ;;
Remember... 
Any time an entire array is to be passed 
to function, it is necessary to pass 
(1) Base address of array 
(2) No. of elements present in the array
main( ) Two Dimensional Array 
{ int a[ ][ ] = { 
{ 2, 6, 1, 8, 4 } 
{ 1, 2, 5, 6, 8 } 
{ 7, 9, 8, 7, 21 } 
{ 4, 5, 6, 8, 10 } 
} ; 
optional 
int i, j ; 
printf ( ”%d”, a[ ][ ] ) ; 
2 4 
printf ( ”%d %d”, sizeof ( a ), a ) ; 
for ( i = 0 ; i = 3 ; i++ ) 
{ 
for ( j = 0 ; j = 4 ; j++ ) 
printf ( ”%d”, a [ i ][ j ] ) ; 
} printf ( ”n” ) ; 
} 
5 
optional 
int b[ ][1][2][3] 
compulsory 
21 
40 4080 
optional 
, 
, 
, 
compulsory 
compulsory 
EExxcceeppttiioonn

Vcs17

  • 1.
    main( ) { int a[ ] = { 7, 9, 16, -2, 8 } ; a[0] a[1] a[2] a[3] a[4] 7 9 16 -2 8 102 104 106 108 110 int i ; printf ( ”%u %u %u”, &a[ 0 ], &a[ 1 ], &a[ 2 ] ) ; printf ( ”%u %u %u”, a, a + 1, a + 2 ) ; printf ( ”%d %d %d”, *a, *( a +1 ), *( a + 2 ) ) ; for ( i = 0 ; i <= 4 ; i ++ ) printf ( ”%d”, *( a + i ) ) ; for ( i = 0 ; i <= 4 ; i ++ ) printf ( ”%d”, a[ i ] ) ; } 102 104 106 102 104 106 7 9 16 Another Form... Subscript Notation Pointer Notation
  • 2.
    More Forms... main() { int a[ ] = { 7, 9, 16, -2, 8 } ; int i ; for ( i = 0 ; i <= 4 ; i ++ ) printf ( ”%d”, a[ i ] ) ; for ( i = 0 ; i <= 4 ; i ++ ) printf ( ”%d”, *( a + i ) ) ; for ( i = 0 ; i <= 4 ; i ++ ) printf ( ”%d”, *( i + a ) ) ; for ( i = 0 ; i <= 4 ; i ++ ) printf ( ”%d”, i[ a ] ) ; } a[ i ] i[ a ] *( a + i ) *( i + a )
  • 3.
    Flexible Arrays inta[ n ] ; scanf ( ”%d”, n ) ; Size of an array must always be mentioned as a positive, non-zero, integer constant
  • 4.
    Pointer Arithmetic a b 1008 2009 6002 1012 main( ) { float a = 3.14 , *b ; char ch = ’z’ , *dh ; int i = 25 , *j ; b = a ; dh = ch ; j = i ; printf ( ”%u %u %u”, b, dh, j ) ; b++ ; dh++ ; j++ ; printf ( ”%u %u %u”, b, dh, j ) ; b += 3 ; dh += 8 ; j -= 3 ; printf ( ”%u %u %u”, b, dh, j ) ; } 3.14 ch i z 25 1008 2009 6002 1008 dh j 2009 6002 1024 2010 6004 2018 5998
  • 5.
    Legal Pointer Arithmetic Pointer + number Pointer - number Pointer - Pointer Pointer Pointer Number
  • 6.
    Access Using Pointers main( ) { int a[ ] = { 7, 9, 16, -2, 8 } ; int *p ; int i ; p = a ; /* same as a[ 0 ] */ printf ( ”%d”, *p ) ; p++ ; 7 printf ( ”%d”, p ) ; 104 printf ( ”%d”, *p ) ; 9 for ( i = 0 ; i = 4 ; i++ ) printf ( ”%d”, *p ) ; p++ ; { } } a[0] a[1] a[2] a[3] a[4] 7 9 16 -2 8 102 104 106 108 110 p p 102 104 p++ * ++ p++ ; p Ist * ++p ; IInd Ist IInd ++ *p ; p = a ;
  • 7.
    main( ) { [ ] For Notation... int a[ ] = { 7, 9, 16, -2, 8 } ; int *p ; int i ; p = a ; for ( i = 0 ; i = 4 ; i ++ ) printf ( ”%d %d %d %d”, } a[0] a[1] a[2] a[3] a[4] 7 9 16 -2 8 102 104 106 108 110 *( p + i ), *( i + p ), p[ i ], i[ p ] ) ; int a[5] ; int 5[a] ; printf ( ”%d”, a[2] ) ; printf ( ”%d”, 2[a] ) ; int a[5] ; int 5[a] ; printf ( ”%d”, a[2] ) ; printf ( ”%d”, 2[a] ) ;
  • 8.
    Dancing Dolls Revisited main( ) { char far *s = 0xB8000000 ; int i ; for ( i = 0 ; i = 3999 ; i += 2 ) { if ( *( s + i ) = ’A’ *( s + i ) = ’Z’ ) } } ss[[ ii ]] * ( i + s ) i[ s ] a[i] - One is pointer or array - Other is int
  • 9.
    main( ) { Changing Array Address int a[ ] = { 7, 9, 16, -2, 8 } ; int *p ; int i ; p = a ; for ( i = 0 ; i = 4 ; i ++ ) printf ( ”%d”, *p ) ; p++ ; { } } for ( i = 0 ; i = 4 ; i ++ ) printf ( ”%d”, *a ) ; a++ ; { } Error a[0] a[1] a[2] a[3] a[4] 7 9 16 -2 8 102 104 106 108 110 a-- ; a = a + 2 ; a = a - 2 ; a += 2 ; a -= 2 ; a-- ; a = a + 2 ; a = a - 2 ; a += 2 ; a -= 2 ;
  • 10.
    Passing Array Elements main( ) { int a[ ] = { 7, 9, 16, -2, 8 } ; int i ; display ( a[ 0 ], a[ 1 ], a[ 2 ], a[ 3 ], a[ 4 ] ) ; for ( i = 0 ; i = 4 ; i++ ) display1 ( a[ i ] ) ; } display ( int i, int j, int k, int l, int m ) { printf ( ”%d %d %d %d %d”, i, j, k, l, m ) ; } display1 ( int n ) { printf ( ”%d”, n ) ; } Which is good? Which is good?
  • 11.
    Passing Entire Array main( ) { int a[ ] = { 7, 9, 16, -2, 8 } ; display2 ( a ) ; display3 ( a ) ; , sizeof ( a ) / 2 - 1 } display2 ( i n t * p ) int i ; for ( i = 0 ; i = 4 ; i ++ ) printf ( ”%d”, ) ; } *( p + i ) { display3 ( i n t * p , int n ) { i = n int i ; for ( i = 0 ; i = 4 ; i ++ ) } printf ( ”%d”, * ( p + i ) ) ; a[0] a[1] a[2] a[3] a[4] 7 9 16 -2 8 102 104 106 108 110 qqssoorrtt (( aa,, 55,, ,, ,, )) ;;
  • 12.
    Remember... Any timean entire array is to be passed to function, it is necessary to pass (1) Base address of array (2) No. of elements present in the array
  • 13.
    main( ) TwoDimensional Array { int a[ ][ ] = { { 2, 6, 1, 8, 4 } { 1, 2, 5, 6, 8 } { 7, 9, 8, 7, 21 } { 4, 5, 6, 8, 10 } } ; optional int i, j ; printf ( ”%d”, a[ ][ ] ) ; 2 4 printf ( ”%d %d”, sizeof ( a ), a ) ; for ( i = 0 ; i = 3 ; i++ ) { for ( j = 0 ; j = 4 ; j++ ) printf ( ”%d”, a [ i ][ j ] ) ; } printf ( ”n” ) ; } 5 optional int b[ ][1][2][3] compulsory 21 40 4080 optional , , , compulsory compulsory EExxcceeppttiioonn