2
Most read
4
Most read
Arrays
Muhammad Hammad Waseem
m.hammad.wasim@gmail.com
Introduction
• Arrays
• Structures of related data items
• Static entity – same size throughout program
2M. Hammad Waseem
Arrays
• Array
• Group of consecutive memory locations
• Same name and type
• To refer to an element, specify
• Array name
• Position number
• Format:
arrayname[ position number ]
• First element at position 0
• n element array named c:
• c[ 0 ], c[ 1 ]...c[ n – 1 ]
3
Name of array
(Note that all
elements of this
array have the
same name, c)
Position number
of the element
within array c
c[6]
-45
6
0
72
1543
-89
0
62
-3
1
6453
78
c[0]
c[1]
c[2]
c[3]
c[11]
c[10]
c[9]
c[8]
c[7]
c[5]
c[4]
M. Hammad Waseem
Arrays
• Array elements are like normal variables
c[ 0 ] = 3;
printf( "%d", c[ 0 ] );
• Perform operations in subscript. If x equals 3
c[ 5 - 2 ] == c[ 3 ] == c[ x ]
4M. Hammad Waseem
Declaring Arrays
• When declaring arrays, specify
• Name
• Type of array
• Number of elements
arrayType arrayName[ numberOfElements ];
• Examples:
int c[ 10 ];
float myArray[ 3284 ];
• Declaring multiple arrays of same type
• Format similar to regular variables
• Example:
int b[ 100 ], x[ 27 ];
5M. Hammad Waseem
Examples Using Arrays
• Initializers
int n[ 5 ] = { 1, 2, 3, 4, 5 };
• If not enough initializers, rightmost elements become 0
int n[ 5 ] = { 0 }
• All elements 0
• If too many a syntax error is produced syntax error
• C arrays have no bounds checking
• If size omitted, initializers determine it
int n[ ] = { 1, 2, 3, 4, 5 };
• 5 initializers, therefore 5 element array
6M. Hammad Waseem
Multiple-Subscripted Arrays
• Multiple subscripted arrays
• Tables with rows and columns (m by n array)
• Like matrices: specify row, then column
7
Row 0
Row 1
Row 2
Column 0 Column 1 Column 2 Column 3
a[ 0 ][ 0 ]
a[ 1 ][ 0 ]
a[ 2 ][ 0 ]
a[ 0 ][ 1 ]
a[ 1 ][ 1 ]
a[ 2 ][ 1 ]
a[ 0 ][ 2 ]
a[ 1 ][ 2 ]
a[ 2 ][ 2 ]
a[ 0 ][ 3 ]
a[ 1 ][ 3 ]
a[ 2 ][ 3 ]
Row subscript
Array name
Column subscript
M. Hammad Waseem
Multiple-Subscripted Arrays
• Initialization
• int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };
• Initializers grouped by row in braces
• If not enough, unspecified elements set to zero
int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };
• Referencing elements
• Specify row, then column
printf( "%d", b[ 0 ][ 1 ] );
8
1 2
3 4
1 0
3 4
M. Hammad Waseem
 2000 Prentice Hall, Inc.
All rights reserved.
• Initialize array
• Loop
• Print
9
1
2 Histogram printing program */
3 #include <stdio.h>
4 #define SIZE 10
5
6 int main()
7 {
8 int n[ SIZE ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
9 int i, j;
10
11 printf( "%s%13s%17sn", "Element", "Value", "Histogram" );
12
13 for ( i = 0; i <= SIZE - 1; i++ ) {
14 printf( "%7d%13d ", i, n[ i ]) ;
15
16 for ( j = 1; j <= n[ i ]; j++ ) /* print one bar */
17 printf( "%c", '*' );
18
19 printf( "n" );
20 }
21
22 return 0;
23 }
Element Value Histogram
0 19 *******************
1 3 ***
2 15 ***************
3 7 *******
4 11 ***********
5 9 *********
6 13 *************
7 5 *****
8 17 *****************
9 1 *
• Program Output
Example Program: Arrays
Passing Arrays to Functions
• Passing arrays
• To pass an array argument to a function, specify the name of the array without any
brackets
int myArray[ 24 ];
myFunction( myArray, 24 );
• Array size usually passed to function
• Arrays passed call-by-reference
• Name of array is address of first element
• Function knows where the array is stored
• Modifies original memory locations
• Passing array elements
• Passed by call-by-value
• Pass subscripted name (i.e., myArray[ 3 ]) to function
10M. Hammad Waseem
Passing Arrays to Functions
• Function prototype
void modifyArray( int b[], int arraySize );
• Parameter names optional in prototype
• int b[] could be written int []
• int arraySize could be simply int
11M. Hammad Waseem
 2000 Prentice Hall, Inc.
All rights reserved.
Function definitions
Pass array to a
function
Pass array element to
a function
Print
12
1 /* Fig. 6.13: fig06_13.c
2 Passing arrays and individual array elements to functions */
3 #include <stdio.h>
4 #define SIZE 5
5
6 void modifyArray( int [], int ); /* appears strange */
7 void modifyElement( int );
8
9 int main()
10 {
11 int a[ SIZE ] = { 0, 1, 2, 3, 4 }, i;
12
13 printf( "Effects of passing entire array call "
14 "by reference:nnThe values of the "
15 "original array are:n" );
16
17 for ( i = 0; i <= SIZE - 1; i++ )
18 printf( "%3d", a[ i ] );
19
20 printf( "n" );
21 modifyArray( a, SIZE ); /* passed call by reference */
22 printf( "The values of the modified array are:n" );
23
24 for ( i = 0; i <= SIZE - 1; i++ )
25 printf( "%3d", a[ i ] );
26
27 printf( "nnnEffects of passing array element call "
28 "by value:nnThe value of a[3] is %dn", a[ 3 ] );
29 modifyElement( a[ 3 ] );
30 printf( "The value of a[ 3 ] is %dn", a[ 3 ] );
31 return 0;
32 }
Entire arrays passed call-by-
reference, and can be modified
Array elements passed call-by-
value, and cannot be modified
 2000 Prentice Hall, Inc.
All rights reserved.
Function definitions
Program Output
13
33
34 void modifyArray( int b[], int size )
35 {
36 int j;
37
38 for ( j = 0; j <= size - 1; j++ )
39 b[ j ] *= 2;
40 }
41
42 void modifyElement( int e )
43 {
44 printf( "Value in modifyElement is %dn", e *= 2 );
45 }
Effects of passing entire array call by reference:
The values of the original array are:
0 1 2 3 4
The values of the modified array are:
0 2 4 6 8
Effects of passing array element call by value:
The value of a[3] is 6
Value in modifyElement is 12
The value of a[3] is 6

Data Structures - Lecture 3 [Arrays]

  • 1.
  • 2.
    Introduction • Arrays • Structuresof related data items • Static entity – same size throughout program 2M. Hammad Waseem
  • 3.
    Arrays • Array • Groupof consecutive memory locations • Same name and type • To refer to an element, specify • Array name • Position number • Format: arrayname[ position number ] • First element at position 0 • n element array named c: • c[ 0 ], c[ 1 ]...c[ n – 1 ] 3 Name of array (Note that all elements of this array have the same name, c) Position number of the element within array c c[6] -45 6 0 72 1543 -89 0 62 -3 1 6453 78 c[0] c[1] c[2] c[3] c[11] c[10] c[9] c[8] c[7] c[5] c[4] M. Hammad Waseem
  • 4.
    Arrays • Array elementsare like normal variables c[ 0 ] = 3; printf( "%d", c[ 0 ] ); • Perform operations in subscript. If x equals 3 c[ 5 - 2 ] == c[ 3 ] == c[ x ] 4M. Hammad Waseem
  • 5.
    Declaring Arrays • Whendeclaring arrays, specify • Name • Type of array • Number of elements arrayType arrayName[ numberOfElements ]; • Examples: int c[ 10 ]; float myArray[ 3284 ]; • Declaring multiple arrays of same type • Format similar to regular variables • Example: int b[ 100 ], x[ 27 ]; 5M. Hammad Waseem
  • 6.
    Examples Using Arrays •Initializers int n[ 5 ] = { 1, 2, 3, 4, 5 }; • If not enough initializers, rightmost elements become 0 int n[ 5 ] = { 0 } • All elements 0 • If too many a syntax error is produced syntax error • C arrays have no bounds checking • If size omitted, initializers determine it int n[ ] = { 1, 2, 3, 4, 5 }; • 5 initializers, therefore 5 element array 6M. Hammad Waseem
  • 7.
    Multiple-Subscripted Arrays • Multiplesubscripted arrays • Tables with rows and columns (m by n array) • Like matrices: specify row, then column 7 Row 0 Row 1 Row 2 Column 0 Column 1 Column 2 Column 3 a[ 0 ][ 0 ] a[ 1 ][ 0 ] a[ 2 ][ 0 ] a[ 0 ][ 1 ] a[ 1 ][ 1 ] a[ 2 ][ 1 ] a[ 0 ][ 2 ] a[ 1 ][ 2 ] a[ 2 ][ 2 ] a[ 0 ][ 3 ] a[ 1 ][ 3 ] a[ 2 ][ 3 ] Row subscript Array name Column subscript M. Hammad Waseem
  • 8.
    Multiple-Subscripted Arrays • Initialization •int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; • Initializers grouped by row in braces • If not enough, unspecified elements set to zero int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; • Referencing elements • Specify row, then column printf( "%d", b[ 0 ][ 1 ] ); 8 1 2 3 4 1 0 3 4 M. Hammad Waseem
  • 9.
     2000 PrenticeHall, Inc. All rights reserved. • Initialize array • Loop • Print 9 1 2 Histogram printing program */ 3 #include <stdio.h> 4 #define SIZE 10 5 6 int main() 7 { 8 int n[ SIZE ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 }; 9 int i, j; 10 11 printf( "%s%13s%17sn", "Element", "Value", "Histogram" ); 12 13 for ( i = 0; i <= SIZE - 1; i++ ) { 14 printf( "%7d%13d ", i, n[ i ]) ; 15 16 for ( j = 1; j <= n[ i ]; j++ ) /* print one bar */ 17 printf( "%c", '*' ); 18 19 printf( "n" ); 20 } 21 22 return 0; 23 } Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 * • Program Output Example Program: Arrays
  • 10.
    Passing Arrays toFunctions • Passing arrays • To pass an array argument to a function, specify the name of the array without any brackets int myArray[ 24 ]; myFunction( myArray, 24 ); • Array size usually passed to function • Arrays passed call-by-reference • Name of array is address of first element • Function knows where the array is stored • Modifies original memory locations • Passing array elements • Passed by call-by-value • Pass subscripted name (i.e., myArray[ 3 ]) to function 10M. Hammad Waseem
  • 11.
    Passing Arrays toFunctions • Function prototype void modifyArray( int b[], int arraySize ); • Parameter names optional in prototype • int b[] could be written int [] • int arraySize could be simply int 11M. Hammad Waseem
  • 12.
     2000 PrenticeHall, Inc. All rights reserved. Function definitions Pass array to a function Pass array element to a function Print 12 1 /* Fig. 6.13: fig06_13.c 2 Passing arrays and individual array elements to functions */ 3 #include <stdio.h> 4 #define SIZE 5 5 6 void modifyArray( int [], int ); /* appears strange */ 7 void modifyElement( int ); 8 9 int main() 10 { 11 int a[ SIZE ] = { 0, 1, 2, 3, 4 }, i; 12 13 printf( "Effects of passing entire array call " 14 "by reference:nnThe values of the " 15 "original array are:n" ); 16 17 for ( i = 0; i <= SIZE - 1; i++ ) 18 printf( "%3d", a[ i ] ); 19 20 printf( "n" ); 21 modifyArray( a, SIZE ); /* passed call by reference */ 22 printf( "The values of the modified array are:n" ); 23 24 for ( i = 0; i <= SIZE - 1; i++ ) 25 printf( "%3d", a[ i ] ); 26 27 printf( "nnnEffects of passing array element call " 28 "by value:nnThe value of a[3] is %dn", a[ 3 ] ); 29 modifyElement( a[ 3 ] ); 30 printf( "The value of a[ 3 ] is %dn", a[ 3 ] ); 31 return 0; 32 } Entire arrays passed call-by- reference, and can be modified Array elements passed call-by- value, and cannot be modified
  • 13.
     2000 PrenticeHall, Inc. All rights reserved. Function definitions Program Output 13 33 34 void modifyArray( int b[], int size ) 35 { 36 int j; 37 38 for ( j = 0; j <= size - 1; j++ ) 39 b[ j ] *= 2; 40 } 41 42 void modifyElement( int e ) 43 { 44 printf( "Value in modifyElement is %dn", e *= 2 ); 45 } Effects of passing entire array call by reference: The values of the original array are: 0 1 2 3 4 The values of the modified array are: 0 2 4 6 8 Effects of passing array element call by value: The value of a[3] is 6 Value in modifyElement is 12 The value of a[3] is 6