六、数组
数组均由连续的存储单元组成,最低地址对应于数组的第一个元素,最高地址对应于数组的最后一个元素
一维数组
类型说明符 数组标识符[常量表达式]
类型说明符表示数组中的所有元素类型
数组标识符表示该数组型变量的名称,命名规则与变量名一致
常量表达式定义了数组中存放数据元素的个数,即数组长度
下标从0开始,可以是整型常量或整型表达式
初始化
在定义数组时直接对数组元素赋初值
int array[6]={1,2,3,4,5,6}
只给部分元素赋值,未赋值的元素默认为0
int array[6]={1,2,3}
对全部数组元素赋初值时,可以不指定数组长度
int array[]={1,2,3,4}
二维数组
类型说明符 数组标识符[常量表达式1][常量表达式2]
[常量表达式1]称为行下标
[常量表达式2]称为列下标
不管是行下标还是列下标都是从0开始的
初始化
int a[3][3]={1,2,3,4,5,6,7,8}
第一行元素1,2,3
第二行元素4,5,6
第三行元素7,8,0
1、所有数据写在一对大括号内,按照数组元素排列顺序对元素赋值,如果大括号内的数据元素个数少于数组元素个数,则系统将默认后面未被赋值的元素值为0
int array[2][2]={1,2,3,4}
2、为所有元素赋初值时,可以省略行下标,但是不能省略列下标。以下数据共有6个,数组每行分为3列,可以确定数组为2行
int array[][3]={1,2,3,4,5,6}
3、分行给数组元素赋值
int array[2][3]={{1,2,3},{4,5,6}}
4、分行赋值,也可以对部分元素赋值,则未赋值的部分元素值为0
int array[2][3]={{1,2},{4,5}} 1,2,0 4,5,0
5、二维数组也可以直接对数组元素赋值
int a[2][3]; a[0][0]=1; a[0][1]=2
字符数组
字符数组中的每一个元素可以存放一个字符
通常使用一个字符数组来存放一个字符串
char 数组标识符[常量表达式]
初始化
1、逐个字符赋给数组中的各元素
char array[5]={'A','B','C','D','E'}
2、如果在定义字符数组时进行初始化,则可以省略长度,系统会自动根据初始值个数来确定数组长度
char array[]={'A','B','C','D','E'}
3、利用字符串给字符数组赋初值
通常用一个字符数组来存放一个字符串
或者将{}去掉
char array[]={"hello"} char array[]="hello"
结束标志
使用字符数组保存字符串,系统会自动为其添加"\0"作为结束符,并以此作为该字符串是否结束的标志
用字符串方式赋值,会比用字符逐个赋值要多占一个字节,多占的这个字节用于存放字符串结束标志"\0"
char array[]="hello" 等价于 char array[]={'h','e','l','l','o','\0'}
字符数组的输入和输出
1、使用格式符"%c"输入输出
char array[]="hello"; for(i=0;i<5;i++){ printf("%c",array[i]); }
变量i为循环的控制变量,并在循环中作为数组的下标进行循环输出
2、使用格式符"%s"输入输出
char array[]="hello"; printf("%s",array);
注意
- 输出字符不包括结束符"\0"
- printf()函数中的输出项时字符数组名array,而不是数组中的元素名array[0]
- 如果数组长度大于字符串实际长度,也只输出到"\0"结束
- 如果数组中包含多个"\0",则遇到第一个"\0",就结束输出
多维数组
数据类型 数组名[常量表达式1][常量表达式3]...[常量表达式]
对于三维数组a[i][j][k]
所在的地址是从a[0][0][0]
起算到(ixnxp+jxp+k)个单位的位置
字符串处理函数
字符串复制
复制特定长度的字符串到另一个字符串中,字符串结束标志"\0"也一同被复制
strcpy(目的字符数组名,源字符数组名)
注意
目的字符数组应该有足够的长度,否则不能全部装入所复制的字符串
目的字符数组名,必须写成数组名的形式
源字符数组名,可以是字符数组名,也可以是一个字符串常量,这时相当于把一个字符串赋给一个字符数组
不能用赋值语句将一个字符串常量或字符数组直接赋值给一个字符数组
实质
用源字符数组中的字符串覆盖目的字符数组中的字符串
字符串连接
将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串。字符串结束标志"\0"也一同被复制,并删除目的字符数组中原有的字符串结束标志"\0"
strcat(目的字符数组名,源字符数组名)
注意
要求目的字符数组有足够的长度,否则不能装入连接后的字符串
实质
不存在覆盖,单纯的将源字符数组中的字符串连接到目的字符数组中的字符串的后面
字符串比较
将一个字符串与另一个字符串从首字母开始,按照ASCII码的顺序逐个进行比较
当两个字符串进行比较时,若出现不同的字符,则以第一个不同的字符的比较结果作为整个比较结果
strcmp(字符数组名1,字符数组名2)
字符串大小转换
小写字母转大写字母,其他字母不变
strupr(字符串)
大写字母转小写字母,其他字母不变
strlwr(字符串)
字符串长度获取
int sz = sizeof(arr) / sizeof(arr[0]);
sizeof(arr):
sizeof 是一个运算符,用来返回其操作数的大小(以字节为单位)。
arr 是我们想要确定大小的数组的名称。
sizeof(arr) 返回数组 arr 的总大小(以字节为单位)。sizeof(arr[0]):
arr[0] 表示数组 arr 的第一个元素。
sizeof(arr[0]) 返回数组 arr 中第一个元素的大小(以字节为单位)。计算数组元素个数:
sizeof(arr) 返回整个数组 arr 的大小(以字节为单位)。
sizeof(arr[0]) 返回数组 arr 中第一个元素的大小(以字节为单位)。
将 sizeof(arr) 的总大小除以 sizeof(arr[0]) 的单个元素大小,得到的结果就是数组 arr 中元素的个数。
strlen(字符数组名)
计算字符串的实际长度(不含字符串结束标志"\0"),函数返回值为字符串的实际长度