资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第9章 数组 9.1 一维数组的定义和一维数组元素的引用 9.2 一维数组和指针 9.3 函数之间对一维数组和数组元素的引用 9.4 一维数组应用举例 9.5 二维数组的定义和二维数组元素的引用 9.6 二维数组和指针 9.7 二维数组名和指针数组作为实参 9.8 二维数组程序举例9.1 一维数组的定义和一维数组元素的引用9.1.1 一维数组的定义数组是具有相同类型的变量的集合,这些变量在内存中占有连续的存储单元。一维数组的定义形式如下:类型名 数组名整型常量表达式和变量名的命名规则相同也叫下标表达式,当只有一 个下标时,为一维数组例如:int a8; /*定义了一个名为a的一维数组*/int b35; /*定义了一个名为b的二维数组*/ 方括号中的8规定了a数组含有8个元素(变量),它们是a0、 a1、 、 a7。 类型名int规定了a数组中每个元素都是整型,在每个元素中只能存放整型数。 在使用该数组时,它的下标范围是从07,即下标的下界为0,上界为7。 定义数组,也就是在内存中开辟了一块连续的空间。如图所示。例如:int a8; /*定义了一个名为a的一维数组*/a0 a1 a2 a3 a4 a5 a6 a7 在一个定义数组语句中,可以有多个数组说明 符,它们之间用逗号隔开。如: double w22,v100,u5; 数组说明符和普通变量名可同时出现在一个类型定义语句中,例如:注意数组说明符的一对方括号中只能是整型常量或整型常量表达式。char c1,c2,carr51;char c1,c2,carr10+71;9.1 一维数组的定义和一维数组元素的引用9.1.2 一维数组元素的引用(使用)若有以下定义语句:double x8;则我们可以引用(使用)的数组元素可以有:x0、 x1、 x2、 、 x7。引用的形式还可以是:int i,j,k;i=1;j=3;k=5;xi=7.5;xj=7.5;xi+k=7.5;x1=7.5;x3=7.5;x6=7.5;说明1. 一个数组元素实质上就是一个变量,代表内存中的一个存储单元。 2. 在引用数组元素时,数组元素中下标表达式的值必须是整数,下标 表达式值的下限从0开始。9.1 一维数组的定义和一维数组元素的引用9.1.3 一维数组的初始化(定义时赋初值)为所定义的数组元素赋初值:int a8=2,4,6,8,10,12,14,16;以上语句就相当于:int a8;a0=2; a1=4; a2=6; a3=8; a4=10; a5=12; a6=14; a7=16;注意1. 在初始化时,一对花括号中的数值类型必须与所说明的类型一致。 他们之间用逗号隔开。 2. 在初始化时,一对花括号中的数据个数不能多于所定义数组的元素 个数。否则在编译时将给出出错信息。 3. 当所赋初值少于所定义数组的元素个数时,系统将自动给后面的元 素补以初值0。例如:int a5=2,4;a0=2; a1=4; a2=0; a3=0; a4=0;9.1 一维数组的定义和一维数组元素的引用9.1.4 通过赋初值定义数组的大小例如: a =0,0,0,0,0,0,0,0;这时我们可以确定数 组的大小为8a8=0,0,0,0,0,0,0,0; 或 a8=0;9.1 一维数组的定义和一维数组元素的引用9.1.5 一维数组的定义和数组元素引用举例例9.1 编写程序,定义一个含有30个元素的int类型数组。依次给数组元素赋奇 数1、3、5、,然后按每行10个数顺序输出,最后再按每行10个数逆序输出。程序分析: 首先定义数组; 给数组赋值; 顺序输出,每行10个; 逆序输出,每行10个;#include #define M 30 main() int sM,i,k=1;for(i=0;i=0;i-)printf(“%4d“,si);if(i%10=0) printf(“n“); printf(“n“); Sequence Output:1 3 5 7 9 11 13 15 17 1921 23 25 27 29 31 33 35 37 3941 43 45 47 49 51 53 55 57 59Invert Output:59 57 55 53 51 49 47 45 43 4139 37 35 33 31 29 27 25 23 2119 17 15 13 11 9 7 5 3 19.2 一维数组和指针9.2.1 一维数组和数组元素的地址如下定义的是一个包含5个元素的一维数组:int a5;数组a在内存中开辟存储单元的示意图如下: a0 a1 a2 a3 a4a0 、a1、 a2、 a3、 a4 实质上就是五个变量名。这时我们引用该元素的时候,只是引用其中的值, 那我们如何获取该元素的地址呢?例如:int *p;p=除此之外,数组中还有一个特殊的地址表示方式:数组名 a也表示地址相等地址(指针)a 永远是指向 这边的。/*定义a为包含5个整型数据的数组*/ /*定义p为指向整型变量的指针变量*/ /*把数组中第一个元素的地址赋给指针变量p,即p指向a数组的第一个元素*/p=a;p例如:p=a+1;p+;pp请问a+是否合法?非法,因为a是数组首地址,是地址常量,常量不能进行+和- -运算9.2 一维数组和指针9.2.1 一维数组和数组元素的地址举例说明:float a10,*p; int k; p=a; for(k=0;k=0 int arrin(int *); /*函数说明语句*/ main() int sM,k;k=arrin(s);arrout(s,k); int arrin(int *a) /*a为指针,因为传递过来是地址s*/ int i=0,x;scanf(“%d“,while(x=0) /*为负数时退出循环*/*(a+i)=x; /*因为a指向数组s中的元素,所以相当于si=x*/i+;scanf(“%d“,return i; /*返回你输入数据的个数*/ void arrout(int *a,int n) /*输出该数组中的数据*/ int i;for(i=0;i 50 30 -510 50 30int arrin(int a) int arrin(int aM)void arrout(int a,int n) int i;for(i=0;i #define M 10 #define B 4 void setstar(char *,int); void arrout(char *,int); main() char cM=A,B,C,D,E,F,G,H,I,J;setstar(arrout(c,M); void setstar(char *a,int n) int i;for(i=0;i #define N 10 int *fun(int aN,int n) int bN;:return b; main() int wN;*p;:p=fun(w,N);: 由于b数组在自定义函数中,所以说fun函数执行 完毕后,该数组在内存中将不存在了,也就是说他 的地址也没有了,虽然程序中的意思是想返回该 地址,但该数组已经不存在了,所以指针变量p将 不指向任何对象而成为”无向指针”。9.5 二维数组的定义和二维数组元素的引用9.5.1 二维数组的定义二维数组的定义形式如下:类型名 数组名整型常量表达式1 整型常量表达式2例如:int a34; 定义了一个名为a的二维数组。 a中每个元素都是整型。 a数组中共有两个下标,第一个方括号中的下标的下限为0,上限为2;第二个方括号中的下标的下限为0,上限为3。a数组中的数组元素共有12(3X4)个,它们分别如下:a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23第1行第1列第2列第3列第4列第2行 第3行 在二维数组中,每个元素都有两个下标,第一个方括号中的下标代表行号,称为行下标;第二个方括号中的下标代表列号,称为列下标。行下标和列下标的下限总为0。9.5 二维数组的定义和二维数组元素的引用9.5.1 二维数组的定义 a数组中的元素在内存中也是占一片连续的存储单元。数组元素在内存中的排列顺序如下图:a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23注意在C语言中,也可以把二维数组中的每一行单独作为一个一维 数组,如以上的二维数组也可以看成是由a0 、a1、 a2三 个一维数组组成,其中每个一维数组中又包含四个元素。a0a1a2a0a0 a0 a0a1 a1 a1 a1a2 a2 a2 a29.5 二维数组的定义和二维数组元素的引用9.5.2 二维数组元素的引用(使用)若有以下定义语句: double w42;则我们可以引用(使用)的数组元素可以有: w00、 w01 、 w20 、 、 w31 。引用的形式还可以是:int i,j,k;i=1;j=3;k=5;wji=7.5;wj0=7.5;wi+1k-j-i=7.5;w3 1=7.5;w30=7.5;w21=7.5; 在引用数组元素时,数组元素中下标表达式的值必须是整数, 下标表达式值的下限从0开始,且不能超越界限。 引用二维数组时,一定要把两个下标分别放在两个方括号内。例如:注意w0,1 wj,i wi+1,k-j-i不合法9.5 二维数组的定义和二维数组元素的引用9.5.3 二维数组的初始化(定义时赋初值) 为所定义的数组元素赋初值: int a43=1,2,3, 4,5,6, 7,8,9, 10,11,12;a00=1; a01=2; a02=3; a10=4; a11=5; a12=6;a20=7; a21=8; a22=9; a30=10; a31=11; a32=12; 当每行所赋初值的个数与数组元素个数不同时,例如:int a43=1,2, 4,5, 7, 10; a00=1; a01=2; a02=0; a
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号