《C大学基础教程第五章zh.ppt》由会员分享,可在线阅读,更多相关《C大学基础教程第五章zh.ppt(63页珍藏版)》请在金锄头文库上搜索。
1、C+大学基础教程大学基础教程第第5 5章章 数组数组北京科技大学北京科技大学 计算机系计算机系数组基本概念数组是具有一定顺序关系的若干相同类型变量数组是具有一定顺序关系的若干相同类型变量的集合。的集合。组成数组的变量称为该数组的组成数组的变量称为该数组的元素元素。数组元素都有相同的变量名(数组名),但是数组元素都有相同的变量名(数组名),但是有不同的下标。有不同的下标。数组属于构造类型数组属于构造类型一个人一个人N N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?一个班一个班N N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?.2024/8/132北京科技大学计算机系一维数组的定义
2、与引用一维数组的定义一维数组的定义类型说明符类型说明符 数组名数组名 常量表达式常量表达式 ; 例如:例如: intint a10; a10; 1)1) a a 为整型数组名;为整型数组名; 2 2)a a数组有数组有1010个元素,每个元素都是整数数据:个元素,每个元素都是整数数据:a0.a9a0.a9数组名的构成方法与一般变量名相同,必须是合法的标识符。 数 组上C+课程的学生成绩(120个学生)float scoresCPlus120;scoresCPlus0scoresCPlus1192024/8/133北京科技大学计算机系一维数组的存储顺序一维数组的存储顺序数组元素数组元素在内存中顺
3、次存放,它们的在内存中顺次存放,它们的地址是连续的地址是连续的。Eg.intEg.int a10; a10;具有具有1010个元素的数组个元素的数组 a a,在内存中的存放次序,在内存中的存放次序如下:如下:数组名字是数组首元素的内存地址。数组名是一个常量,不能被赋值。a0 a1a2 a3 a4a5 a6 a7a8 a9a 数 组2024/8/134北京科技大学计算机系一维数组的定义与引用l引用引用1.数组必须先定义,后使用。2.只能逐个引用数组元素,而不能一次引用整个数组3.数组元素的引用是通过下标变量实现的。元素的引用形式为:元素的引用形式为: 数组名数组名 下标表达式下标表达式 例如1:
4、int a10; a0=a5+a7-a2*3 2: int salaries 6; int a=5; salariesa=900; 数 组2024/8/135北京科技大学计算机系注意在使用数组元素时需要注意:在使用数组元素时需要注意:数组元素的下标表达式其结果必须正整数数组元素的下标表达式其结果必须正整数(00)。)。数组元素的下标值从数组元素的下标值从0 0开始,不得超过声明时开始,不得超过声明时所定义的上界。所定义的上界。2024/8/136北京科技大学计算机系数组的下标数组元素的下标是数组元素到数组开始地址的数组元素的下标是数组元素到数组开始地址的偏移量。偏移量。第第1 1个元素的下标为
5、个元素的下标为0 0,其地址是数组的首地址,其地址是数组的首地址,第第2 2个元素的下标为个元素的下标为1 1,偏移量距离首地址是,偏移量距离首地址是1 1个数组元素大小,依次类推。个数组元素大小,依次类推。因此,数组元素是一系列大小相同的连续项,因此,数组元素是一系列大小相同的连续项,每项到公共基点(数组起始地址)的偏移量是每项到公共基点(数组起始地址)的偏移量是固定的。固定的。2024/8/137北京科技大学计算机系错误的数组定义语句void VoidArray10;void VoidArray10;/void/void不可以做数组类型不可以做数组类型intint a=9; float a
6、=9; float floatArrayafloatArraya; ; /数组的长度不可以是变量数组的长度不可以是变量char charArray1.5+1.5;char charArray1.5+1.5;/3.0/3.0不是整数不是整数2024/8/138北京科技大学计算机系例5.1 定义一个10个整数的数组解:以解:以ARRAYARRAY命名的数组,用命名的数组,用100100至至109109对数组元素赋值,并对数组元素赋值,并对其求和。需要在一个循环中使用数组。这是使用数组最对其求和。需要在一个循环中使用数组。这是使用数组最经常的方式。经常的方式。void main()void main
7、() intint ARRAY 10; ARRAY 10; intint sum=0; sum=0; for ( for (intint i=0;i10;i+) i=0;i10;i+) ARRAYiARRAYi=100+i;=100+i; sum+= sum+= ARRAYiARRAYi; 2024/8/139北京科技大学计算机系注意不能直接把一个数组赋给另一个数组。假设要将不能直接把一个数组赋给另一个数组。假设要将数组数组total_salestotal_sales的值拷贝到数组的值拷贝到数组saved_salessaved_sales中,中,使用下面的赋值方法就是错误的:使用下面的赋值方法
8、就是错误的:saved_salessaved_sales = =total_salestotal_sales; ; /error/error 应使用一个循环语句将应使用一个循环语句将total_salestotal_sales中的元素中的元素的值逐个赋给数组的值逐个赋给数组saved_salessaved_sales中的每个元素。中的每个元素。如下面的代码所示:如下面的代码所示:for (for (intint i=0;i i=0;iARRAY_SIZE;iARRAY_SIZE;i+)+)saved_salesisaved_salesi = =total_salesitotal_salesi;
9、2024/8/1310北京科技大学计算机系一维数组的初始化可以使数组得到初值:可以使数组得到初值:n在声明数组时对数组元素赋以初值。在声明数组时对数组元素赋以初值。例如:例如:intint a10=0,1,2,3,4,5,6,7,8,9; a10=0,1,2,3,4,5,6,7,8,9;n可以只给一部分元素赋初值。其他元素自动赋值为可以只给一部分元素赋初值。其他元素自动赋值为0 0例如:例如:intint a10=0,1,2,3,4; a10=0,1,2,3,4;n在对全部数组元素赋初值时,可以不指定数组长度。在对全部数组元素赋初值时,可以不指定数组长度。长度为初值的个数。长度为初值的个数。例
10、如:例如:intint a =1,2,3,4,5 a =1,2,3,4,5 等价于等价于 intint a5=1,2,3,4,5 a5=1,2,3,4,5 数 组2024/8/1311北京科技大学计算机系大括号的使用 通过使用大括号,可初始化任何一种类型的数组。通过使用大括号,可初始化任何一种类型的数组。 例如,要记录前三年的销售总额,则可以如下定例如,要记录前三年的销售总额,则可以如下定义并初始化一个数组:义并初始化一个数组:double sales= 4323.43double sales= 4323.43,122355.32122355.32,343324.96343324.96 注意:
11、上面这种使用大括号来初始化数组的方注意:上面这种使用大括号来初始化数组的方法只能在定义数组时使用。在数组定义之后,就不法只能在定义数组时使用。在数组定义之后,就不能用这种方法了,而只能逐个元素地赋值。能用这种方法了,而只能逐个元素地赋值。double sales3;double sales3;sales= 4323.43sales= 4323.43,122355.32122355.32,343324.96343324.962024/8/1312北京科技大学计算机系全局数组初始化C+C+自动将全局数组变量中的所有元素初始化为自动将全局数组变量中的所有元素初始化为0 0或或nullnull。n如果
12、未赋初值,那么一个全局的字符数组中的所有元如果未赋初值,那么一个全局的字符数组中的所有元素将为素将为null(null(空空) ),一个全局的数字数组中的所有元素,一个全局的数字数组中的所有元素将为将为0 0。程序中应尽量限制全局数组变量的使用。如果要程序中应尽量限制全局数组变量的使用。如果要用,也最好在程序中用语句将其显式初始化为用,也最好在程序中用语句将其显式初始化为0 0,以明确表示编程者的意图。,以明确表示编程者的意图。2024/8/1313北京科技大学计算机系错误例子例如下面的代码对数组进行初始化是错误的:例如下面的代码对数组进行初始化是错误的:intint array15=0,1,
13、2,3,4,5; array15=0,1,2,3,4,5; /error/error初始化值个数多于数组元素个数初始化值个数多于数组元素个数intint array25 array25, , 1, 2, 3 , , 1, 2, 3 ;/error/error不能加入不能加入“,”,”来跳过不赋值的元素。来跳过不赋值的元素。intint array25=0,2,3,4; array25=0,2,3,4; /error/error不能加入不能加入“,”,”来跳过不赋值的元素。来跳过不赋值的元素。intint array35= ; array35= ; /error/error语法格式错误语法格式错
14、误2024/8/1314北京科技大学计算机系例例5.25.2初始化全局和局部数组#include using namespace std;int array15=1,2,3;static int array25=1;void main() int arr15=2; static int arr25=1,2; int n; cout global:; for(n=0; n5; n+) cout array1n;运行结果为:运行结果为:global: 1 2 3 0 0/全局数组初始化的结果全局数组初始化的结果global static: 1 0 0 0 0 /全局静态数组初始化的结果全局静态数组
15、初始化的结果local: 2 0 0 0 0/局部数组初始化的结果局部数组初始化的结果local static: 1 2 0 0 0/局部静态数组初始化的结果局部静态数组初始化的结果 cout nglobal static:;for(n=0; n5; n+) cout array2n; cout nlocal:n; for(n=0; n5; n+) cout arr1n; cout nlocal static:; for(n=0; n5; n+) cout arr2n; cout endl;2024/8/1315北京科技大学计算机系例5.3 将5个温度值赋给数组#include stdafx.
16、h#includevoid main()float temp5; temp0=31.3; temp1=28.7;temp2=32.2;temp3=34.5;temp4=19.7;coutDaily temperature for 5 daysn;for (int i=0;i 5 ;i+)couttempin;2024/8/1316北京科技大学计算机系数组的大小和数组越界定义数组时,编译器必须知道数组的大小。定义数组时,编译器必须知道数组的大小。如果数组定义时省略了大小,由初始化的值的个如果数组定义时省略了大小,由初始化的值的个数来决定数组大小。数来决定数组大小。在程序中怎么知道数组的大小呢?在
17、程序中怎么知道数组的大小呢? sizeofsizeof操作解决了该问题。操作解决了该问题。2024/8/1317北京科技大学计算机系sizeofsizeofsizeof()()能够返回传递给它的数据类型所占用内存能够返回传递给它的数据类型所占用内存的字节数。的字节数。如果将一个数组变量传给如果将一个数组变量传给sizeofsizeof()(),则它将返回系,则它将返回系统为此数组在内存中预留的字节数。统为此数组在内存中预留的字节数。因此,数组的大小可用用以下公式来计算:因此,数组的大小可用用以下公式来计算: 数组大小数组大小 = = sizeofsizeof( (数组名数组名) / ) / s
18、izeofsizeof( (数组类型数组类型) )2024/8/1318北京科技大学计算机系例5.7 用sizeof确定数组的大小#include using namespace std;void main() int a=1,2,4,8,16; for(int i=0; i(sizeof(a)/sizeof(int); i+) cout ai ; cout endl;运行结果为:运行结果为:1 2 4 8 162024/8/1319北京科技大学计算机系一维数组的举例例例: 6个整数排列顺序,从小到大排列输出。个整数排列顺序,从小到大排列输出。1)定义存放定义存放6个数的变量个数的变量 int
19、 a6;2)先从先从6个数中找到最小,放到个数中找到最小,放到a0中。中。for (i=1;iai) swap(a0,ai);3)再从再从5个数中找到最小,放到个数中找到最小,放到a1中。中。for (i=2;iai) swap(a1,ai); 数 组2024/8/1320北京科技大学计算机系以以6 6个数:个数:3 3、7 7、5 5、6 6、8 8、0 0为例。为例。思路:思路:第一趟:将第一个数依次和后面的数比较,如第一趟:将第一个数依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。结束后,第一个数
20、则是最小的数。第二趟:将第二个数依次和后面的数比较,如第二趟:将第二个数依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较果后面的某数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数;结束后,第二个数则是次小的数; 。选择法序排序(从小到大)。选择法序排序(从小到大)。2024/8/1321北京科技大学计算机系 3 3 7 7 5 5 5 5 6 6 6 6 8 8 8 8 0 0 0 0 3 3 7 7 7 7 5 5 6 6 6 6 8 8 8 8 0 0 0 0 3 3 7 7 7 7 5 5 5 5 6 6 8 8 8 8 0 0 0 0 3 3 7 7 7
21、 7 5 5 5 5 6 6 6 6 8 8 0 0 0 0 3 3 7 7 7 7 5 5 5 5 6 6 6 6 8 8 8 8 0 0 0 0 7 7 7 7 5 5 5 5 6 6 6 6 8 8 8 8 3 3 3 3 不交换不交换不交换不交换 a1a2a3a4a5 a0第一趟第一趟 j=0交换选择法序排序(续)。2024/8/1322北京科技大学计算机系 0 0 7 7 7 7 5 6 8 35 6 8 35 6 8 35 6 8 3 0 30 3 7 6 8 57 6 8 57 6 8 57 6 8 5 j=1 0 30 3 5 5 7 8 67 8 67 8 67 8 6 j=
22、2 0 3 5 60 3 5 6 8 78 78 78 7 j=3 0 3 5 6 70 3 5 6 7 8 8 8 8 j=4j=0 a1a2a3a4a5 a0选择法序排序(续)。2024/8/1323北京科技大学计算机系一维数组的举例例例: 6个整数排列顺序,从小到大排列输出。个整数排列顺序,从小到大排列输出。算法的实现使用二重循环:算法的实现使用二重循环: for (j=0;j5;j+) for (i = j+1;iai) swap(ai,aj); 数 组2024/8/1324北京科技大学计算机系理解多维数组(5.7)一维数组是多个数值的单列表示,而多维数组一维数组是多个数值的单列表示,
23、而多维数组则是数值的表格,甚至多表格表示,它具有多则是数值的表格,甚至多表格表示,它具有多个下标值,最常用的表格是二维表格个下标值,最常用的表格是二维表格( (具有两具有两个下标个下标) )。2024/8/1325北京科技大学计算机系例子假定要记录一个垒球队中每个队员的击球数。队中有假定要记录一个垒球队中每个队员的击球数。队中有6 6个队员,个队员,进行了进行了3 3场比赛。表中所示为击球记录。场比赛。表中所示为击球记录。队员姓名队员姓名1 12 23 3张大明张大明2 21 12 2李方春李方春3 33 33 3林志松林志松2 22 22 2崔明东崔明东1 11 11 1刘屈武刘屈武0 00
24、 00 0安度璧安度璧1 11 11 12024/8/1326北京科技大学计算机系三维表的图示C+C+提供存储多提供存储多维数据的能力,维数据的能力,尽管现实世界很尽管现实世界很少碰到三维以上少碰到三维以上的情况。的情况。2024/8/1327北京科技大学计算机系存储顺序存储顺序按行存放,上例中数组按行存放,上例中数组a a的存储顺序为:的存储顺序为:二维数组的声明二维数组的声明类型说明符类型说明符 数组名数组名 常量表达式常量表达式常量表达式常量表达式 例如:例如:float a34;float a34;a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22
25、a23a0a00 a01 a02 a03a1a10 a11 a12 a13a2a20 a21 a22 a23a可以理解为:引用引用例如:例如:b12=a23/2b12=a23/2下标不要越界下标不要越界下标不要越界下标不要越界二维数组的定义及引用 数 组表5.2球队数组的下标teamteam表具有表具有1818个元素,个元素, 定义:定义: intint team63 team63元素下标值如下表元素下标值如下表0000010102021010111112122020212122223030313132324040414142425050515152522024/8/1329北京科技大学计算机
26、系C+按行存储多维数组二维数组实际上是二维数组实际上是“数组的数组数组的数组”,它以行和,它以行和列的形式出现,实际上还是一个一维数组,只列的形式出现,实际上还是一个一维数组,只不过数组的每个元素的类型不是整型,浮点型不过数组的每个元素的类型不是整型,浮点型或字符型,而是另外一个数组。或字符型,而是另外一个数组。 数组元素也是连续存储的,按行存储,即数组元素也是连续存储的,按行存储,即最右边的下标变化最快,最左边的下标变化最最右边的下标变化最快,最左边的下标变化最慢。慢。2024/8/1330北京科技大学计算机系二维数组看作是一维数组的一维数组一维数组的一维数组的4 4个元素是个元素是ara_
27、name0 ara_name0 ara_name3ara_name3。每一个元素则是其对应的一维。每一个元素则是其对应的一维数组的首地址。数组的首地址。2024/8/1331北京科技大学计算机系分行给二维数组赋初值分行给二维数组赋初值例如:例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;将所有数据写在一个将所有数据写在一个内,按顺序赋值内,按顺序赋值例如:例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;可以对部分元素赋初值可以对部分元素赋初值例如:例如:int a34=1,0,6,0,0,11;二维数组的初始化 数 组5.7.5表格与fo
28、r循环嵌套循环适用于多维数组嵌套循环适用于多维数组注意到注意到forfor循环的循环次数与数组的下标数目相循环的循环次数与数组的下标数目相同,外层循环代表第一个下标同,外层循环代表第一个下标( (行下标行下标) );内层;内层循环代表第二个下标循环代表第二个下标( (列下标列下标) )。嵌套嵌套forfor循环将遍历表中的每一个元素。循环将遍历表中的每一个元素。2024/8/1334北京科技大学计算机系例5.13嵌套for循环处理多维表intint main() main()for (row=0;row2;row+)for (row=0;row2;row+)for (for (colcol=0
29、;col4;col+)=0;col4;col+)coutcoutrow” ”row” ”colcoln;n; 将产生如下输出结果将产生如下输出结果0 00 00 01 10 02 21 10 01 11 11 12 22024/8/1335北京科技大学计算机系例5.15 输出带标题的二维表格void main()float disk24; /存放磁盘价格表存放磁盘价格表int row,col;disk00=2.30; /第一行第一列第一行第一列disk01=2.75;disk02=3.20;disk03=3.50;disk10=1.75;disk11=2.10;disk12=2.60;disk
30、13=2.95; 2024/8/1336北京科技大学计算机系 couttSingle-Side,tDouble-SidetSingle-Side,tDouble-Siden;couttDouble-density,tDouble-densitytHigh-density,tHigh-densityn;for (row=0;row2;row+)/打印表格打印表格if (row=0)cout3 incht;elsecout5 incht;for (col=0;col4;col+)cout$setprecision(2)diskrowcoltt;coutn;2024/8/1337北京科技大学计算机系
31、程序运行结果输出带标题的二维表格输出带标题的二维表格Single-Side Single-Side Double-density, Double-density, Double-Side Double-Side Double-Double-density density Single-Side Single-Side High-density High-density Double-Side Double-Side High-density High-density 3 inch 3 inch $2.30 $2.30 $2.75 $2.75 $3.20 $3.20 $3.50 $3.50 5
32、inch 5 inch $1.75 $1.75 $2.10 $2.10 $2.60 $2.60 $2.95 $2.95 2024/8/1338北京科技大学计算机系字符数组字符串常量字符串常量: :是用一对双引号括起来的字符序列,是用一对双引号括起来的字符序列,每个字符占一个字节,并在末尾添加每个字符占一个字节,并在末尾添加00作为作为结尾标记。结尾标记。例如:china没有字符串变量,用字符数组来存放字符串2024/8/1340北京科技大学计算机系字符数组的定义和引用EgEg. . 字符数组:字符数组:char a 5char a 5; 存储该数组占存储该数组占5 5个字节。每个元素的类型是字
33、个字节。每个元素的类型是字符型。数组下标从符型。数组下标从0 0开始,分别是开始,分别是a0a0,a1a1,a2a2,a3a3,a4a4。格式:格式: char 数组名常量表达式;2024/8/1341北京科技大学计算机系用字符数组存储和处理字符串例:static char str8=112,114,111,103,114,97,109,0;static char str8=p,r,o,g,r,a,m,0;static char str8=program;static char str =program;字符数组的初始化 字符串static char str7 可否?对数组进行初始化赋值时,在
34、末尾放置一个0,便构成了C+字符串。例:static char str7=p,r,o,g,r,a,m;2024/8/1342北京科技大学计算机系注意不要忘记为最后的不要忘记为最后的 0 0分配空间。如果要初分配空间。如果要初始化一个字符串始化一个字符串“hello”hello”,那为它定义的数组,那为它定义的数组至少有至少有6 6个数组元素。个数组元素。例如,下面的代码给数组初始化,但会引起不可例如,下面的代码给数组初始化,但会引起不可预料的错误:预料的错误:nchar array5=“hello”char array5=“hello”;该代码不会引起编译错误,但由于改写了数组空该代码不会引起
35、编译错误,但由于改写了数组空间以外的内存单元,所以是危险的。间以外的内存单元,所以是危险的。2024/8/1343北京科技大学计算机系例5.9 字符数组的初始化和使用。#include void main() char str18=112,114,111,103,114,97,109,0 ; char str28=P,r,o,g,r,a,m,0 ; char str38=program; char str4=program; for (int i=0;i8;i+) coutstr1i; coutendl; coutstr2endl; coutstr3endl; coutstr4endl;202
36、4/8/1344北京科技大学计算机系数组在内存中的存放 数组元素都是存放在一片连续的内存单元中的。数组元素都是存放在一片连续的内存单元中的。下图显示下图显示 char name=”Ray char name=”Ray KrebbsKrebbs”的内存情况的内存情况2024/8/1345北京科技大学计算机系字符串的输入/输出方法方法n逐个字符输入输出逐个字符输入输出n将整个字符串一次输入或输出将整个字符串一次输入或输出例:例:char c =China;char c =China; coutcoutc;str1str2str3; 运行时输入数据: How are you?内存中变量状态如下: s
37、tr1: H o w 0 str2: a r e 0 str3: y o u ? 02024/8/1347北京科技大学计算机系若改为: static char str13; cinstr; 运行时输入数据: How are you?内存中变量 str 内容如下: str: H o w 0 2024/8/1348北京科技大学计算机系字符串处理函数strcatstrcat(连接),连接),strcpystrcpy(复制),复制),strcmpstrcmp(比较),比较),strlenstrlen(求长度),求长度),strlwrstrlwr( (转换为小写),转换为小写),struprstrupr
38、(转换为大写)转换为大写)头文件头文件 字符串2024/8/1349北京科技大学计算机系字符串处理函数#include #include void main()char str1=China;char str2100;strcpy(str2,str1); cout str2: str2 endl;strcat(str2,hello); cout str2: str2 endl;cout strlen(str2): strlen(str2) endl;cout sizeof(str2): sizeof(str2) endl; 字符串ChinaChinahello10100例例5.82024/8/
39、1350北京科技大学计算机系例5.10字符串的输入和输出输入一个字符串,输出这个字符串及字符数目。输入一个字符串,输出这个字符串及字符数目。#include using namespace std;void main() int a=0; char chArray30; cinchArray; for(int i=0; chArrayi!=0; i+) cout chArrayi; a+; cout endl; cout输入的字符数是:输入的字符数是:aendl; 2024/8/1351北京科技大学计算机系数组作为函数参数数组元素作实参,与单个变量一样。数组元素作实参,与单个变量一样。数组名作
40、参数,形、实参数都应是数组名,数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。对形类型要一样,传送的是数组首地址。对形参数组的改变会直接影响到实参数组。参数组的改变会直接影响到实参数组。 数 组2024/8/1352北京科技大学计算机系使用数组元素作为函数参数定义定义 intint swap( swap( intint b,intb,int c) c)调用调用 intint a10; a10; . . swap(a1,a2); swap(a1,a2); 数 组a0a1a2a3a4a5a6a7a8a9ab传递值c传递值2024/8/1353北京科技大学计算机系使用数组名作为
41、函数参数定义定义 intint sort( sort( intint b10) b10) intint sort ( sort (intint b, b, intint number) number)调用调用 intint a10; a10; . . sort(asort(a);); sort(a,10); sort(a,10); 数 组a0a1a2a3a4a5a6a7a8a9abb0 b12024/8/1354北京科技大学计算机系5.6 向函数传递数组无论何时,将数组作为参数传给函数,实际上只是无论何时,将数组作为参数传给函数,实际上只是把数组的地址传给函数。把数组的地址传给函数。物理上,把
42、整个数组放在活动记录中是不合理的,物理上,把整个数组放在活动记录中是不合理的,因为存储活动记录的空间大小是一定且有限的。因为存储活动记录的空间大小是一定且有限的。如果把传送给函数的整个数组都放在栈中如果把传送给函数的整个数组都放在栈中( (内存的内存的大块复制大块复制) ),则很快会把栈空间用光。,则很快会把栈空间用光。2024/8/1355北京科技大学计算机系 #include using namespace std;int sum(int , int);void main()static int ia5=2,3,6,8,10;int sumOfArray;sumOfArray= sum(i
43、a, 5) ;cout “数组元素的和等于数组元素的和等于: ” sumOfArray endl;运行结果为;运行结果为;数组元素的和等于数组元素的和等于: 29例5.12 数组名作为函数的形参int sum(int array, int len) int iSum=0;for(int i=0; ilen; i+)iSum+=arrayi;return iSum;ia0 ia1 ia2 ia3 ia4236810iaarray2024/8/1357北京科技大学计算机系注意sum()sum()函数以整数数组作为第一个参数,以整函数以整数数组作为第一个参数,以整数作为第二个参数。数作为第二个参数。
44、由于传递数组名实际上传递的是地址,所以函由于传递数组名实际上传递的是地址,所以函数原型中,数组参数的书写形式无须在方括号数原型中,数组参数的书写形式无须在方括号中写明数组大小。中写明数组大小。如果写明了数组大小,编译器将忽略之。数组如果写明了数组大小,编译器将忽略之。数组形参的全方括号只是告诉函数,该参数是个数形参的全方括号只是告诉函数,该参数是个数组的起始地址。组的起始地址。2024/8/1358北京科技大学计算机系例5-4 使用数组名作为函数参数主函数中初始化一个矩阵并将每个元素都输出,主函数中初始化一个矩阵并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,然后调用子函数,分别
45、计算每一行的元素之和,将和直接存放在每行的第一个元素中,并输出将和直接存放在每行的第一个元素中,并输出各行元素的和。各行元素的和。 数 组int Table34 = 1,2,3,4,2,3,4,5,3,4,5,6;2024/8/1359北京科技大学计算机系void main(void) int Table34 = 1,2,3,4,2,3,4,5,3,4,5,6;for (int i = 0; i 3; i+)for (int j = 0; j 4; j+)cout Tableij ;cout endl;RowSum(Table,3);2024/8/1360北京科技大学计算机系#include
46、void RowSum(int A 4, int nrow) int sum;for (int i = 0; i nrow; i+)sum = 0;for(int j = 0; j 4; j+)sum += Aij; Ai0 = sum;cout Sum of row i is sum endl; 2024/8/1361北京科技大学计算机系运行结果:运行结果:1 2 3 42 3 4 53 4 5 6Sum of row 0 is 10Sum of row 1 is 14Sum of row 2 is 182024/8/1362北京科技大学计算机系本章小结本章介绍了如何定义和初始化一个数组。数
47、组的初始化可本章介绍了如何定义和初始化一个数组。数组的初始化可以在声明部分进行,也可以在程序体中进行。以在声明部分进行,也可以在程序体中进行。现在我们已经学习过了如何定义,初始化及处理多维数组,现在我们已经学习过了如何定义,初始化及处理多维数组,尽管并非所有数据适用于表格的紧缩格式,但它确实在很尽管并非所有数据适用于表格的紧缩格式,但它确实在很多时候非常有用。使用嵌套多时候非常有用。使用嵌套forfor循环可以遍历多维数组。循环可以遍历多维数组。通过本章的学习,我们知道,通过引入数组,处理数组元通过本章的学习,我们知道,通过引入数组,处理数组元素比处理相同个数的单个变量要简单得多素比处理相同个数的单个变量要简单得多2024/8/1363北京科技大学计算机系