对一维数组的引用,既可以用传统的数组元素的下标法,也可使用指针的表示方法。例7.11输入10个数,采用指针变量表示的地址法输入输出数组各元素。由于数组元素在内存是连续存放的,若给指向整型变量的指针传递数组的首地址,则该指针指向二维数组。#include<stdio.h>例7.16用指针法输入输出二维数组各元素。......
2023-11-18
一维数组是指只用一个下标就可以引用其元素的数组,数组中的元素都具有相同的数据类型。在C程序中,数组使用前必须先定义,定义中指定数组的数据类型、名字、维数以及各维的长度。
1.一维数组的定义
定义一维数组的一般形式:
数据类型符数组名[常量表达式];
其中,数据类型指定数组元素的数据类型,可以是基本数据类型,也可以是构造数据类型;方括号是定义数组的标志,其中的常量表达式用于指定数组的长度,即数组中数组元素的个数。例如,int score[10];定义了由10个数据类型为整型的数组元素组成的一维数组score。
定义数组必须注意以下几点:
①数组名的命名必须符合C语言关于标识符的书写规定,同时数组名也是变量,因此在定义数组时,数组的名字不能与同一范围内已经定义的其他变量名字相同。
②定义数组时,不能用变量来表示数组的长度(注:在C99标准中可以用变量表示数组长度),但是可以用符号常数或常量表达式。下面是一组用于比较的定义形式:
③可以在一个语句中定义若干个相同数据类型(维数可以不同)的数组,也可以在定义数组的同时定义同数据类型的其他变量。例如,int a1[10],a2[40],x,y;同时定义了整型数组a1、a2以及整型变量x和y。
④若有需要,可以定义全局(外部)数组或静态数组。若定义了全局或者静态数组,在没有显示初始化的情况下,数组全部元素的初始值为0。例如:
static double score[50];//定义长度为50的双精度实型静态数组
一维数组在存储时需要占用连续的内存空间,数组名代表数组存储区的首地址,数组在系统内存中按其下标的顺序连续存储元素值。数组的下标值规定为从0开始到指定长度的数减1为止。假定数组int a[10];在内存中的起始地址为4 000,数组a在存储器中的映像如图6.1所示,其每一个数据元素所占用的字节长度与它们的数据类型相关。
图6.1 数组a在存储器中的映像
在32位系统中,每个整型数据占用4个字节。若有以下数组定义:
int a[10];
则长度为10的整型数组a占用的内存空间长度为40个字节。
一个数组所占用的内存空间长度可以使用两种方法之一来获取:
·使用sizeof(数组名)。例如,sizeof(a);。
·使用数组长度*sizeof(数组类型名)。例如,10*sizeof(int);。
2.一维数组的初始化
C语言允许在定义数组的同时进行初始化,一维数组初始化的一般形式如下:
数据类型符数组名[常量表达式]={常数1,常数2,…,常数n};
例如:int a1[5]={1,2,3,4,5};
一维数组的初始化可以用以下方法实现:
①数组初始化时,给出全部数组元素的初始值。例如:
int a1[5]={-10,20,28,-1,88};
float b[3]={2.18,3.14,89.0};
②数组初始化时,给出部分数组元素的初始值,此时未初始化元素值为0(字符类为'\0')。例如:
int a2[10]={1,2,3,4,5};//a2的后5个数组元素的值均为0
int a3[10]={0};//a3中所有数组元素的值均为0
③数组初始化时未指定数组的长度,则以初始化数值的个数作为数组的长度,或者说如果在初始化时给出了全部的数组元素初始值,可以不指定数组的长度。例如:
int a4[]={1,2,3,4,5,6,7,8,9,10};//a4的长度为10
3.一维数组元素的引用方法
C语言规定,一般情况下数组不能作为一个整体参加数据处理,而只能通过处理每一个数组元素(下标变量)达到处理数组的目的。数组元素的表示形式为:
数组名[下标]
其中,下标就是数组元素在数组中的位置序号,可以是整型常数或表达式。若下标是实型数据,系统会自动将其取整。例如,若有定义语句:int a[5];,表示定义了有5个元素的数组a,这5个元素分别为a[0]、a[1]、a[2]、a[3]、a[4]。
在使用一维数组时还需要注意以下几点:(www.chuimin.cn)
①C语言不提供数组下标越界的保护。定义数组时用到的“数组名[整型常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的。
如定义数组int a[5];表示只能有效引用a[0]、a[1]、…、a[4]这5个元素。如果程序中出现c=a[5];或d=a[8]+5;之类的引用时,C语言的编译系统不会给出错误提示,程序也可以运行,但其结果是不可预料的,甚至会产生严重的后果。
②每个数组元素与其他基本类型变量一样有自己的地址,并用“&”符号获取。
③C语言规定:每个数组元素只能逐个引用,而不能一次引用整个数组。
④引用数组元素之前,必须确保数组元素已经被赋值,否则得到的是一个不确定的值。例如,若有定义语句:int a[3];,可以通过赋值语句来对每个数组元素赋值,a[0]=1;a[1]=3;a[2]=259;确保每个数组元素有值。
⑤数组元素与它同类型的一般变量(简单变量)的用法相同。
4.一维数组的基本操作
对于一维数组,可以像普通变量一样对其任一元素进行处理,当需要数组中所有元素参与运算时,则使用一重循环的形式进行处理。
设有定义语句:int a[10],i;,下面展示了一维数组常见处理的代码段:
①输入数组元素值。
②输出数组元素值。
for(i=0;i<10;i++)
③求数组元素的最小值min。
④求数组元素的最小值下标mini。
⑤求数组元素的最大值max和最大值下标maxi。
⑥求数组元素的和sum。
【例6.1】 将一个整型数组中所有元素值在同一个数组中按逆序重新存放并输出。
程序中,用整型变量i和j分别表示要交换元素的位置,初始时i表示第一个元素的位置,j表示最后一个元素的位置。实现一次交换后用i++将i指向下一个欲交换的元素,用j--将j指向前一个欲交换的元素,只要满足条件i<j就进行对应元素值的交换;反复进行上述操作直至满足条件i>=j中止循环。程序一次运行情况如下所示:
请输入10个整数:
【例6.2】 编写程序使用一维数组打印如下所示的杨辉三角形前10行。
例6.2程序中,为了简化对应关系(避免使用0号元素对应第一个数据)使用了一个11个元素的数组进行处理。程序中反复利用同一个一维数组处理杨辉三角形,所以每生成一行杨辉三角形的元素值后立即将该行值输出。对每一行杨辉三角形值的具体处理方法为:首先用表达式yh[row]=1将该行数据的最后一个置1,然后从后向前依次在循环条件满足的情况下执行表达式:yh[col]=yh[col]+yh[col-1],该表达式的意思是将一维数组yh上一次当前位置元素值与其前面一个位置上一次的元素值相加作为本次当前位置上的元素值,图6.2展示了通过第5行数据生成第6行数据的情况。
图6.2 使用一维数组杨辉三角形一行的生成方法
有关C语言程序设计基础(第3版)的文章
对一维数组的引用,既可以用传统的数组元素的下标法,也可使用指针的表示方法。例7.11输入10个数,采用指针变量表示的地址法输入输出数组各元素。由于数组元素在内存是连续存放的,若给指向整型变量的指针传递数组的首地址,则该指针指向二维数组。#include<stdio.h>例7.16用指针法输入输出二维数组各元素。......
2023-11-18
指针数组是一组有序的指针的集合。用一维指针数组处理二维数组示例。程序一次运行的结果为:11415019618955311556532879428指针数组还常用于处理若干个相关的一维数组,此时指针数组中的每个元素指向一个一维数组的首地址。上面程序综合使用了指针数组和二级指针变量,在数据对象的定义和初始化阶段完成后形成的处理结构如图8.9所示。......
2023-11-20
图8.3用指针修改数组元素的值使用指针变量表示数组元素示例。另外,在输出数组值的操作中,首先让指针变量p指向数组0号元素,然后通过循环控制中的p++运算,使得指针变量p依次指向a数组的其他元素,通过*p的方式表达数组元素值。程序执行的结果为:0010000如果有两个指针变量分别指向同一个数组的两个不同元素,则两个指针变量之间的距离表示了它们之间的差距有多少个数组元素。......
2023-11-20
例如,对一维结构体数组的初始化就类似于普通二维数组的初始化,初始化中的注意事项也与二维普通数组初始化时相同或类似。同样也不能将结构体数组元素作为一个整体直接进行输入输出,也需要通过输入输出数组元素的每一个成员分量达到输入输出结构体数组元素的目的。对结构体数组元素操作的唯一例外是可以将结构体数组元素作为一个整体赋给同类型数组的另外一个元素,或赋给一个同类型的结构体变量。结构体数组操作示例。......
2023-11-20
一维数组是最简单的数组,其逻辑结构为线性表。一维数组必须先定义才能使用。例如:2.一维数组的初始化数组定义后,系统为其开辟所需的存储单元,但是如果未经初始化,其存储单元中的数值是不确定的,即随机数。数组元素的初值必须依次放在一对大括号内,各初值之间用逗号隔开。......
2023-10-21
当指针变量指向一维数组的首元素时,称为指向了一维数组。所以,函数中一维数组形式参数可以用同类的指针形式参数替代;同理也可以用指向特定数组的指针变量来传递数组类实际参数。特别需要注意的是,函数的形式参数无论使用的是数组名形式还是指针变量形式,本质上都是一个指针变量,在被调函数中既可以将它当作数组名使用也可以将它当作指针变量使用。......
2023-11-20
在前面的章节中已经讨论过整数的产生方法,本小节以数组为载体进一步讨论产生随机数的技术。为了能够在程序中随机生成数据,需要使用C语言提供的srand、rand和time 3个标准库函数。随机生成20个3位以内的整数序列存放在数组中,然后用每行10个数据的形式输出所有数组元素。程序一次运行结果为:6 73 796 864 999 12 881 293 634 453110 636 127 541 896 731 615 841 533 796在上面程序中,用表达式rand()%1000获取3位以内的随机整数。......
2023-11-20
图5.3指针变量指针变量本身也是变量,所以指针变量在使用之前也需要定义。为指针变量赋值的方法有两种:一种是定义后,使用赋值语句的方式;另外一种是定义的同时进行初始化方式。......
2023-11-20
相关推荐