0% found this document useful (0 votes)
34 views50 pages

Outline 7.2 Arrays 7.3 Declaring Arrays 7.4 Examples Using Arrays 7.5 Passing Arrays To Functions 7.9 Multidimensional Arrays

The document discusses arrays in C++. It defines arrays as consecutive groups of memory locations of the same type. Array elements are accessed using an index number within square brackets. Arrays can be declared with a specified size and initialized in various ways, including using a for loop or initializer list. Examples show initializing arrays to zero, declaring and initializing an array in one statement, and using a constant variable for the array size.

Uploaded by

Aws Idrees
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views50 pages

Outline 7.2 Arrays 7.3 Declaring Arrays 7.4 Examples Using Arrays 7.5 Passing Arrays To Functions 7.9 Multidimensional Arrays

The document discusses arrays in C++. It defines arrays as consecutive groups of memory locations of the same type. Array elements are accessed using an index number within square brackets. Arrays can be declared with a specified size and initialized in various ways, including using a for loop or initializer list. Examples show initializing arrays to zero, declaring and initializing an array in one statement, and using a constant variable for the array size.

Uploaded by

Aws Idrees
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 50

1

Chapter 4 - Arrays
Outline
7.1 Introduction
7.2 Arrays
7.3 Declaring Arrays
7.4 Examples Using Arrays
7.5 Passing Arrays to Functions
7.9 Multidimensional Arrays

 2003 Prentice Hall, Inc. All rights reserved.


2

7.1 Introduction

• Arrays
– Structures of related data items
– Static entity (same size throughout program)
• A few types
– Pointer-based arrays (C-like)
– Arrays as objects (C++)

 2003 Prentice Hall, Inc. All rights reserved.


3

7.2 Arrays

• Array
– Consecutive group of memory locations
– Same name and type (int, char, etc.)
• To refer to an element
– Specify array name and position number (index)
– Format: arrayname[ position number ]
– First element at position 0
• N-element array c
c[ 0 ], c[ 1 ] … c[ n - 1 ]
– Nth element as position N-1

 2003 Prentice Hall, Inc. All rights reserved.


4

7.2 Arrays

• Array elements like other variables


– Assignment, printing for an integer array c
c[ 0 ] = 3;
cout << c[ 0 ];
• Can perform operations inside subscript
c[ 5 – 2 ] same as c[3]

 2003 Prentice Hall, Inc. All rights reserved.


  5

7.2 Arrays
Name of array (Note
that all elements of
this array have the
same name, c)

c[0] -45
c[1] 6
c[2] 0
c[3] 72
c[4] 1543
c[5] -89
c[6] 0
c[7] 62
c[8] -3
c[9] 1
c[10] 6453
c[11] 78

Position number of the


element within array c

 2003 Prentice Hall, Inc. All rights reserved.


6

7.3 Declaring Arrays

• When declaring arrays, specify


– Name
– Type of array
• Any data type
– Number of elements
– type arrayName[ arraySize ];
int c[ 10 ]; // array of 10 integers
float d[ 3284 ]; // array of 3284 floats

• Declaring multiple arrays of same type


– Use comma separated list, like regular variables
int b[ 100 ], x[ 27 ];

 2003 Prentice Hall, Inc. All rights reserved.


7

7.4 Examples Using Arrays

• Initializing arrays
– For loop
• Set each element
– Initializer list
• Specify each element when array declared
int n[ 5 ] = { 1, 2, 3, 4, 5 };
• If not enough initializers, rightmost elements 0
• If too many syntax error
– To set every element to same value
int n[ 5 ] = { 0 };
– If array size omitted, initializers determine size
int n[] = { 1, 2, 3, 4, 5 };
• 5 initializers, therefore 5 element array

 2003 Prentice Hall, Inc. All rights reserved.


8
1 // Fig. 7.3: fig04_03.cpp
2 // Initializing an array.
Outline
3 #include <iostream>
4
fig04_03.cpp
5 using std::cout;
(1 of 2)
6 using std::endl;
7
8 #include <iomanip>
9
10 using std::setw;
11
Declare a 10-element array of
12 int main() integers.
13 {
14 int n[ 10 ]; // n is an array of Initialize
10 integersarray to 0 using a
15 for loop. Note that the array
16 // initialize elements of array n has
to 0elements n[0] to n[9].
17 for ( int i = 0; i < 10; i++ )
18 n[ i ] = 0; // set element at location i to 0
19
20 cout << "Element" << setw( 13 ) << "Value" << endl;
21
22 // output contents of array n in tabular format
23 for ( int j = 0; j < 10; j++ )
24 cout << setw( 7 ) << j << setw( 13 ) << n[ j ] << endl;
25

 2003 Prentice Hall, Inc.


All rights reserved.
9
26 return 0; // indicates successful termination
27
Outline
28 } // end main

Element Value
fig04_03.cpp
0 0 (2 of 2)
1 0
2 0 fig04_03.cpp
3 0 output (1 of 1)
4 0
5 0
6 0
7 0
8 0
9 0

 2003 Prentice Hall, Inc.


All rights reserved.
10
1 // Fig. 7.4: fig04_07.cpp
2 // Initializing an array with a declaration.
Outline
3 #include <iostream>
4
fig04_07.cpp
5 using std::cout;
(1 of 1)
6 using std::endl;
7
8 #include <iomanip>
9
10 using std::setw;
11
12 int main() Note the use of the initializer
13 { list.
14 // use initializer list to initialize array n
15 int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 };
16
17 cout << "Element" << setw( 13 ) << "Value" << endl;
18
19 // output contents of array n in tabular format
20 for ( int i = 0; i < 10; i++ )
21 cout << setw( 7 ) << i << setw( 13 ) << n[ i ] << endl;
22
23 return 0; // indicates successful termination
24
25 } // end main

 2003 Prentice Hall, Inc.


All rights reserved.
11
Element Value
0 32
Outline
1 27
2 64
fig04_07.cpp
3 18
output (1 of 1)
4 95
5 14
6 90
7 70
8 60
9 37

 2003 Prentice Hall, Inc.


All rights reserved.
12

7.4 Examples Using Arrays

• Array size
– Can be specified with constant variable (const)
• const int size = 20;
– Constants cannot be changed
– Constants must be initialized when declared
– Also called named constants or read-only variables

 2003 Prentice Hall, Inc. All rights reserved.


13
1 // Fig. 7.5: fig04_05.cpp
2 // Initialize array s to the even integers from 2 to 20.
Outline
3 #include <iostream>
4
fig04_05.cpp
5 using std::cout;
(1 of 2)
6 using std::endl;
7
8 #include <iomanip>
9
10 using std::setw;
11 Note use of const keyword.
12 int main()
Only const variables can
13 {
14
specify array sizes.
// constant variable can be used to specify array size
15 const int arraySize = 10;
The program becomes more
16
17 int s[ arraySize ]; // array s
scalable when we set the array
has 10 elements
18 size using a const variable.
19 for ( int i = 0; i < arraySize; i++ ) // We
set can
the change
values arraySize,
20 s[ i ] = 2 + 2 * i; and all the loops will still
21 work (otherwise, we’d have to
22 cout << "Element" << setw( 13 ) << "Value"update every loop in the
<< endl;
23 program).

 2003 Prentice Hall, Inc.


All rights reserved.
14
24 // output contents of array s in tabular format
25 for ( int j = 0; j < arraySize; j++ )
Outline
26 cout << setw( 7 ) << j << setw( 13 ) << s[ j ] << endl;
27
fig04_05.cpp
28 return 0; // indicates successful termination
(2 of 2)
29
30 } // end main
fig04_05.cpp
Element Value output (1 of 1)
0 2
1 4
2 6
3 8
4 10
5 12
6 14
7 16
8 18
9 20

 2003 Prentice Hall, Inc.


All rights reserved.
15
1 // Fig. 7.6: fig04_06.cpp
2 // Using a properly initialized constant variable.
Outline
3 #include <iostream>
4
fig04_06.cpp
5 using std::cout;
(1 of 1)
6 using std::endl;
7 Proper initialization of
8 int main() const variable. fig04_06.cpp
9 { output (1 of 1)
10 const int x = 7; // initialized constant variable
11
12 cout << "The value of constant variable x is: "
13 << x << endl;
14
15 return 0; // indicates successful termination
16
17 } // end main

The value of constant variable x is: 7

 2003 Prentice Hall, Inc.


All rights reserved.
16
1 // Fig. 7.7: fig04_07.cpp
2 // A const object must be initialized.
Outline
3 Uninitialized const results
4 int main() in a syntax error. Attempting
fig04_07.cpp
5 { to modify the const is
(1 of 1)
6 const int x; // Error: x another
must error.
be initialized
7
8 x = 7; // Error: cannot modify a const variable fig04_07.cpp
9 output (1 of 1)
10 return 0; // indicates successful termination
11
12 } // end main

d:\cpphtp4_examples\ch04\Fig04_07.cpp(6) : error C2734: 'x' :


const object must be initialized if not extern
d:\cpphtp4_examples\ch04\Fig04_07.cpp(8) : error C2166:
l-value specifies const object

 2003 Prentice Hall, Inc.


All rights reserved.
17
1 // Fig. 7.8: fig04_08.cpp
2 // Compute the sum of the elements of the array.
Outline
3 #include <iostream>
4
fig04_08.cpp
5 using std::cout;
(1 of 1)
6 using std::endl;
7
8 int main() fig04_08.cpp
9 { output (1 of 1)
10 const int arraySize = 10;
11
12 int a[ arraySize ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
13
14 int total = 0;
15
16 // sum contents of array a
17 for ( int i = 0; i < arraySize; i++ )
18 total += a[ i ];
19
20 cout << "Total of array element values is " << total << endl;
21
22 return 0; // indicates successful termination
23
24 } // end main

Total of array element values is 55

 2003 Prentice Hall, Inc.


All rights reserved.
18
1 // Fig. 7.9: fig04_09.cpp
2 // Histogram printing program.
Outline
3 #include <iostream>
4
fig04_09.cpp
5 using std::cout;
(1 of 2)
6 using std::endl;
7
8 #include <iomanip>
9
10 using std::setw;
11
12 int main()
13 {
14 const int arraySize = 10;
15 int n[ arraySize ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
16
17 cout << "Element" << setw( 13 ) << "Value"
18 << setw( 17 ) << "Histogram" << endl;
19
20 // for each element of array n, output a bar in histogram
21 for ( int i = 0; i < arraySize; i++ ) {
Prints asterisks corresponding
22 cout << setw( 7 ) << i << setw( 13 )
to size of array element,
23 << n[ i ] << setw( 9 );
24
n[i].
25 for ( int j = 0; j < n[ i ]; j++ ) // print one bar
26 cout << '*';

 2003 Prentice Hall, Inc.


All rights reserved.
19
27
28 cout << endl; // start next line of output
Outline
29
30 } // end outer for structure
fig04_09.cpp
31
(2 of 2)
32 return 0; // indicates successful termination
33
34 } // end main fig04_09.cpp
output (1 of 1)
Element Value Histogram
0 19 *******************
1 3 ***
2 15 ***************
3 7 *******
4 11 ***********
5 9 *********
6 13 *************
7 5 *****
8 17 *****************
9 1 *

 2003 Prentice Hall, Inc.


All rights reserved.
20
1 // Fig. 7.10: fig04_10.cpp
2 // Roll a six-sided die 6000 times.
Outline
3 #include <iostream>
4
fig04_10.cpp
5 using std::cout;
(1 of 2)
6 using std::endl;
7
8 #include <iomanip>
9
10 using std::setw;
11
12 #include <cstdlib>
13 #include <ctime>
14
Remake of old program to roll
15 int main()
16 {
dice. An array is used instead
17 const int arraySize = 7; of 6 regular variables, and the
18 int frequency[ arraySize ] = { 0 }; proper element can be
19 updated easily (without
20 srand( time( 0 ) ); // seed random-number needing a switch).
generator
21
22 // roll die 6000 times This creates a number
23 for ( int roll = 1; roll <= 6000; roll++ ) between 1 and 6, which
24 ++frequency[ 1 + rand() % 6 ]; // replaces 20-line switch
determines the index of
25 // of Fig. 3.8
frequency[] that should
be incremented.

 2003 Prentice Hall, Inc.


All rights reserved.
21
26
27 cout << "Face" << setw( 13 ) << "Frequency" << endl;
Outline
28
29 // output frequency elements 1-6 in tabular format
fig04_10.cpp
30 for ( int face = 1; face < arraySize; face++ )
(2 of 2)
31 cout << setw( 4 ) << face
32 << setw( 13 ) << frequency[ face ] << endl;
33 fig04_10.cpp
34 return 0; // indicates successful termination output (1 of 1)
35
36 } // end main

Face Frequency
1 1003
2 1004
3 999
4 980
5 1013
6 1001

 2003 Prentice Hall, Inc.


All rights reserved.
22
1 // Fig. 7.11: fig04_11.cpp
2 // Student poll program.
Outline
3 #include <iostream>
4
fig04_11.cpp
5 using std::cout;
(1 of 2)
6 using std::endl;
7
8 #include <iomanip>
9
10 using std::setw;
11
12 int main()
13 {
14 // define array sizes
15 const int responseSize = 40; // size of array responses
16 const int frequencySize = 11; // size of array frequency
17
18 // place survey responses in array responses
19 int responses[ responseSize ] = { 1, 2, 6, 4, 8, 5, 9, 7, 8,
20 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7,
21 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 };
22
23 // initialize frequency counters to 0
24 int frequency[ frequencySize ] = { 0 };
25

 2003 Prentice Hall, Inc.


All rights reserved.
23
26 // for each answer, select value of an element of array
27 // responses and use that value as subscript in array
Outline
28 // frequency to determine element to increment
29 for ( int answer = 0; answer < responseSize; answer++ )
fig04_11.cpp
30 ++frequency[ responses[answer] ];
(2 of 2)
31
responses[answer] is
32 // display results
33
the rating (from 1 to 10).
cout << "Rating" << setw( 17 ) << "Frequency" << endl;
This
34 determines the index in
35 // output frequencies in tabular frequency[] to increment.
format
36 for ( int rating = 1; rating < frequencySize; rating++ )
37 cout << setw( 6 ) << rating
38 << setw( 17 ) << frequency[ rating ] << endl;
39
40 return 0; // indicates successful termination
41
42 } // end main

 2003 Prentice Hall, Inc.


All rights reserved.
24
Rating Frequency
1 2
Outline
2 2
3 2
fig04_11.cpp
4 2
output (1 of 1)
5 5
6 11
7 5
8 7
9 1
10 3

 2003 Prentice Hall, Inc.


All rights reserved.
25

7.4 Examples Using Arrays

• Strings (more in ch. 5)


– Arrays of characters
– All strings end with null ('\0')
– Examples
• char string1[] = "hello";
– Null character implicitly added
– string1 has 6 elements
• char string1[] = { 'h', 'e', 'l', 'l',
'o', '\0’ };
– Subscripting is the same
String1[ 0 ] is 'h'
string1[ 2 ] is 'l'

 2003 Prentice Hall, Inc. All rights reserved.


26

7.4 Examples Using Arrays

• Input from keyboard


char string2[ 10 ];
cin >> string2;
– Puts user input in string
• Stops at first whitespace character
• Adds null character
– If too much text entered, data written beyond array
• We want to avoid this (section 5.12 explains how)
• Printing strings
– cout << string2 << endl;
• Does not work for other array types
– Characters printed until null found

 2003 Prentice Hall, Inc. All rights reserved.


27
1 // Fig. 4_12: fig04_12.cpp
2 // Treating character arrays as strings.
Outline
3 #include <iostream>
4
fig04_12.cpp
5 using std::cout;
(1 of 2)
6 using std::cin;
7 using std::endl;
8 Two different ways to declare
9 int main() strings. string2 is
10 { initialized, and its size
11 char string1[ 20 ], // determined
reserves 20automatically
characters .
12 char string2[] = "string literal"; // reserves 15 characters
13 Examples of reading strings
14 // read string from
from user into array the keyboard and
string2
15 cout << "Enter the string \"helloprinting them
there\": "; out.
16 cin >> string1; // reads "hello" [space terminates input]
17
18 // output strings
19 cout << "string1 is: " << string1
20 << "\nstring2 is: " << string2;
21
22 cout << "\nstring1 with spaces between characters is:\n";
23

 2003 Prentice Hall, Inc.


All rights reserved.
28
24 // output characters until null character is reached
25 for ( int i = 0; string1[ i ] != '\0'; i++ )
Outline
26 cout << string1[ i ] << ' ';
27
Can access the characters in a fig04_12.cpp
28 cin >> string1; // reads "there"
string using array notation. (2 of 2)
29 cout << "\nstring1 is: " << string1 << endl;
30
The loop ends when the null
31 return 0; // indicates successful character is found.
termination fig04_12.cpp
32 output (1 of 1)
33 } // end main

Enter the string "hello there": hello there


string1 is: hello
string2 is: string literal
string1 with spaces between characters is:
h e l l o
string1 is: there

 2003 Prentice Hall, Inc.


All rights reserved.
29

7.4 Examples Using Arrays

• Recall static storage (chapter 3)


– If static, local variables save values between function
calls
– Visible only in function body
– Can declare local arrays to be static
• Initialized to zero
static int array[3];
• If not static
– Created (and destroyed) in every function call

 2003 Prentice Hall, Inc. All rights reserved.


30
1 // Fig. 7.13: fig04_13.cpp
2 // Static arrays are initialized to zero.
Outline
3 #include <iostream>
4
fig04_13.cpp
5 using std::cout;
(1 of 3)
6 using std::endl;
7
8 void staticArrayInit( void ); // function prototype
9 void automaticArrayInit( void ); // function prototype
10
11 int main()
12 {
13 cout << "First call to each function:\n";
14 staticArrayInit();
15 automaticArrayInit();
16
17 cout << "\n\nSecond call to each function:\n";
18 staticArrayInit();
19 automaticArrayInit();
20 cout << endl;
21
22 return 0; // indicates successful termination
23
24 } // end main
25

 2003 Prentice Hall, Inc.


All rights reserved.
31
26 // function to demonstrate a static local array
27 void staticArrayInit( void )
Static array, initialized to zero Outline
28 { on first function call.
29 // initializes elements to 0 first time function is called
fig04_13.cpp
30 static int array1[ 3 ];
(2 of 3)
31
32 cout << "\nValues on entering staticArrayInit:\n";
33
34 // output contents of array1
35 for ( int i = 0; i < 3; i++ )
36 cout << "array1[" << i << "] = " << array1[ i ] << " ";
37
Array data is changed; the
38 cout << "\nValues on exiting staticArrayInit:\n";
modified values stay.
39
40 // modify and output contents of array1
41 for ( int j = 0; j < 3; j++ )
42 cout << "array1[" << j << "] = "
43 << ( array1[ j ] += 5 ) << " ";
44
45 } // end function staticArrayInit
46

 2003 Prentice Hall, Inc.


All rights reserved.
32
47 // function to demonstrate an automatic local array
48 void automaticArrayInit( void ) Automatic array, recreated
Outline
49 { with every function call.
50 // initializes elements each time function is called
fig04_13.cpp
51 int array2[ 3 ] = { 1, 2, 3 };
(3 of 3)
52
53 cout << "\n\nValues on entering automaticArrayInit:\n";
54
55 // output contents of array2
56 for ( int i = 0; i < 3; i++ )
57 cout << "array2[" << i << "] = " << array2[ i ] << " ";
58
Although the array is
59 cout << "\nValues on exiting automaticArrayInit:\n";
changed, it will be destroyed
60
61 // modify and output contents of array2
when the function exits and
62 for ( int j = 0; j < 3; j++ ) the changes will be lost.
63 cout << "array2[" << j << "] = "
64 << ( array2[ j ] += 5 ) << " ";
65
66 } // end function automaticArrayInit

 2003 Prentice Hall, Inc.


All rights reserved.
33
First call to each function:
 
Outline
Values on entering staticArrayInit:
array1[0] = 0 array1[1] = 0 array1[2] = 0
fig04_13.cpp
Values on exiting staticArrayInit:
output (1 of 1)
array1[0] = 5 array1[1] = 5 array1[2] = 5
 
Values on entering automaticArrayInit:
array2[0] = 1 array2[1] = 2 array2[2] = 3
Values on exiting automaticArrayInit:
array2[0] = 6 array2[1] = 7 array2[2] = 8
 
Second call to each function:
 
Values on entering staticArrayInit:
array1[0] = 5 array1[1] = 5 array1[2] = 5
Values on exiting staticArrayInit:
array1[0] = 10 array1[1] = 10 array1[2] = 10
 
Values on entering automaticArrayInit:
array2[0] = 1 array2[1] = 2 array2[2] = 3
Values on exiting automaticArrayInit:
array2[0] = 6 array2[1] = 7 array2[2] = 8

 2003 Prentice Hall, Inc.


All rights reserved.
34

7.5 Passing Arrays to Functions

• Specify name without brackets


– To pass array myArray to myFunction
int myArray[ 24 ];
myFunction( myArray, 24 );
– Array size usually passed, but not required
• Useful to iterate over all elements

 2003 Prentice Hall, Inc. All rights reserved.


35

7.5 Passing Arrays to Functions

• Arrays passed-by-reference
– Functions can modify original array data
– Value of name of array is address of first element
• Function knows where the array is stored
• Can change original memory locations
• Individual array elements passed-by-value
– Like regular variables
– square( myArray[3] );

 2003 Prentice Hall, Inc. All rights reserved.


36

7.5 Passing Arrays to Functions

• Functions taking arrays


– Function prototype
• void modifyArray( int b[], int arraySize );
• void modifyArray( int [], int );
– Names optional in prototype
• Both take an integer array and a single integer
– No need for array size between brackets
• Ignored by compiler
– If declare array parameter as const
• Cannot be modified (compiler error)
• void doNotModify( const int [] );

 2003 Prentice Hall, Inc. All rights reserved.


37
1 // Fig. 7.14: fig04_17.cpp
2 // Passing arrays and individual array elements to functions.
Outline
3 #include <iostream>
4
fig04_17.cpp
5 using std::cout;
(1 of 3)
6 using std::endl;
7
8 #include <iomanip>
9
Syntax for accepting an array
10 using std::setw; in parameter list.
11
12 void modifyArray( int [], int ); // appears strange
13 void modifyElement( int );
14
15 int main()
16 {
17 const int arraySize = 5; // size of array a
18 int a[ arraySize ] = { 0, 1, 2, 3, 4 }; // initialize a
19
20 cout << "Effects of passing entire array by reference:"
21 << "\n\nThe values of the original array are:\n";
22
23 // output original array
24 for ( int i = 0; i < arraySize; i++ )
25 cout << setw( 3 ) << a[ i ];

 2003 Prentice Hall, Inc.


All rights reserved.
38
26
27 cout << endl;
Pass array name (a) and size Outline
28 to function. Arrays are
29 // pass array a to modifyArray bypassed-by-reference.
reference
fig04_17.cpp
30 modifyArray( a, arraySize );
(2 of 3)
31
32 cout << "The values of the modified array are:\n";
33
34 // output modified array
35 for ( int j = 0; j < arraySize; j++ )
36 cout << setw( 3 ) << a[ j ];
37
38 // output value of a[ 3 ]
39 cout << "\n\n\n"
40 << "Effects of passing array element by value:"
Pass a single array element by
41 << "\n\nThe value of a[3] is " << a[ 3 ] << '\n';
42
value; the original cannot be
43 // pass array element a[ 3 ] by valuemodified.
44 modifyElement( a[ 3 ] );
45
46 // output value of a[ 3 ]
47 cout << "The value of a[3] is " << a[ 3 ] << endl;
48
49 return 0; // indicates successful termination
50
51 } // end main

 2003 Prentice Hall, Inc.


All rights reserved.
39
52 Although named b, the array
53 // in function modifyArray, "b" points to
Outline
points to the original array a.
54 // the original array "a" in memory
It can modify a’s data.
55 void modifyArray( int b[], int sizeOfArray )
fig04_17.cpp
56 {
(3 of 3)
57 // multiply each array element by 2
58 for ( int k = 0; k < sizeOfArray; k++ )
59 b[ k ] *= 2;
60
61 } // end function modifyArray
62
Individual array elements are
63 // passed
in function modifyElement, "e" is a local copybyofvalue, and the
64 //array element a[ 3 ] passed from main originals cannot be changed.
65 void modifyElement( int e )
66 {
67 // multiply parameter by 2
68 cout << "Value in modifyElement is "
69 << ( e *= 2 ) << endl;
70
71 } // end function modifyElement

 2003 Prentice Hall, Inc.


All rights reserved.
40
Effects of passing entire array by reference:
 
Outline
The values of the original array are:
0 1 2 3 4
fig04_17.cpp
The values of the modified array are:
output (1 of 1)
0 2 4 6 8
 
 
Effects of passing array element by value:
 
The value of a[3] is 6
Value in modifyElement is 12
The value of a[3] is 6

 2003 Prentice Hall, Inc.


All rights reserved.
41
1 // Fig. 7.15: fig04_15.cpp
2 // Demonstrating the const type qualifier.
Outline
3 #include <iostream>
4
Array parameter declared as fig04_15.cpp
5 using std::cout;
const. Array cannot be (1 of 2)
6 using std::endl;
7
modified, even though it is
8 passed byprototype
void tryToModifyArray( const int [] ); // function reference.
9
10 int main()
11 {
12 int a[] = { 10, 20, 30 };
13
14 tryToModifyArray( a );
15
16 cout << a[ 0 ] << ' ' << a[ 1 ] << ' ' << a[ 2 ] << '\n';
17
18 return 0; // indicates successful termination
19
20 } // end main
21

 2003 Prentice Hall, Inc.


All rights reserved.
42
22 // In function tryToModifyArray, "b" cannot be used
23 // to modify the original array "a" in main.
Outline
24 void tryToModifyArray( const int b[] )
25 {
fig04_15.cpp
26 b[ 0 ] /= 2; // error
(2 of 2)
27 b[ 1 ] /= 2; // error
28 b[ 2 ] /= 2; // error
29 fig04_15.cpp
30 } // end function tryToModifyArray output (1 of 1)

d:\cpphtp4_examples\ch04\Fig04_15.cpp(26) : error C2166:


l-value specifies const object
d:\cpphtp4_examples\ch04\Fig04_15.cpp(27) : error C2166:
l-value specifies const object
d:\cpphtp4_examples\ch04\Fig04_15.cpp(28) : error C2166:
l-value specifies const object

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 7.20: fig07_20.cpp
43
2
3
// This program sorts an array's values into ascending order.
#include <iostream>
Outline
4 using std::cout;
5 using std::endl;
6
fig07_20.cpp
7 #include <iomanip>
8 using std::setw;
9 (1 of 2)
10 int main()
11 {
12 const int arraySize = 10; // size of array a
13 int data[ arraySize ] = { 34, 56, 4, 10, 77, 51, 93, 30, 5, 52 };
14 int insert; // temporary variable to hold element to insert
15
16 cout << "Unsorted array:\n";
17
18 // output original array
19 for ( int i = 0; i < arraySize; i++ )
20 cout << setw( 4 ) << data[ i ];
21 For each array
22 // insertion sort
element
23 // loop over the elements of the array
24 for ( int next = 1; next < arraySize; next++ )
25 {
26 insert = data[ next ]; // store the value in the current element
27
28 int moveItem = next; // initialize location to place element

 2003 Prentice Hall, Inc. All rights reserved.


29
44
30
31
// search for the location in which to put the current element
while ( ( moveItem > 0 ) && ( data[ moveItem - 1 ] > insert ) )
Outline
32 {
33 // shift element one slot to the right
34 data[ moveItem ] = data[ moveItem - 1 ];
Find location where
fig07_20.cpp
current element should
35 moveItem--;
36 } // end while reside
37 (2 of 2)
38 data[ moveItem ] = insert; // place inserted element into the array
39 } // end for
40
41 cout << "\nSorted array:\n";
42 Place element in proper
43 // output sorted array
location
44 for ( int i = 0; i < arraySize; i++ )
45 cout << setw( 4 ) << data[ i ];
46
47 cout << endl;
48 return 0; // indicates successful termination
49 } // end main

Unsorted array:
34 56 4 10 77 51 93 30 5 52
Sorted array:
4 5 10 30 34 51 52 56 77 93

 2003 Prentice Hall, Inc. All rights reserved.


45

7.9 Multidimensional Array

• Multidimensional arrays with two dimensions


– Called two dimensional or 2-D arrays
– Represent tables of values with rows and columns
– Elements referenced with two subscripts ([ x ][ y ])
– In general, an array with m rows and n columns is called an
m-by-n array
• Multidimensional arrays can have more than two
dimensions

 2003 Prentice Hall, Inc. All rights reserved.


46

Common Programming Error 7.12

• Referencing a two-dimensional array element a[ x ]


[ y ] incorrectly as a[ x, y ] is an error.
Actually, a[ x, y ] is treated as a[ y ], because
C++ evaluates the expression x, y (containing a
comma operator) simply as y (the last of the comma-
separated expressions).

 2003 Prentice Hall, Inc. All rights reserved.


47

7.9 Multidimensional Array (Cont.)

• Declaring and initializing two-dimensional arrays


– Declaring two-dimensional array b
• int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };
– 1 and 2 initialize b[ 0 ][ 0 ] and b[ 0 ][ 1 ]
– 3 and 4 initialize b[ 1 ][ 0 ] and b[ 1 ][ 1 ]
• int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };
– Row 0 contains values 1 and 0 (implicitly initialized to
zero)
– Row 1 contains values 3 and 4

 2003 Prentice Hall, Inc. All rights reserved.


48

Fig.7.21 | Two-dimensional array with three rows and four


columns.
 2003 Prentice Hall, Inc. All rights reserved.
1 // Fig. 7.22: fig07_22.cpp
49
2
3
// Initializing multidimensional arrays.
#include <iostream>
Outline
4 using std::cout;
5 using std::endl;
6
7 void printArray( const int [][ 3 ] ); // prototype
fig07_22.cpp
8
9 int main() (1 of 2)
10 {
11 int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
12 int array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }; Use nested array
13 int array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } }; initializers to initialize
14 arrays
15 cout << "Values in array1 by row are:" << endl;
16 printArray( array1 );
17
18 cout << "\nValues in array2 by row are:" << endl;
19 printArray( array2 );
20
21 cout << "\nValues in array3 by row are:" << endl;
22 printArray( array3 );
23 return 0; // indicates successful termination
24 } // end main

 2003 Prentice Hall, Inc. All rights reserved.


25
50
26 // output array with two rows and three columns
27 void printArray( const int a[][ 3 ] )
Outline
28 {
29 // loop through array's rows
30 for ( int i = 0; i < 2; i++ )
fig07_22.cpp
31 {
32 // loop through columns of current row
33 for ( int j = 0; j < 3; j++ ) Use nested for loops (2
to of
print
2)
34 cout << a[ i ][ j ] << ' '; array
35
36 cout << endl; // start new line of output
37 } // end outer for
38 } // end function printArray

Values in array1 by row are:


1 2 3
4 5 6
Values in array2 by row are:
1 2 3
4 5 0
Values in array3 by row are:
1 2 0
4 0 0

 2003 Prentice Hall, Inc. All rights reserved.

You might also like