6.1 定义和引用一维数组
- 1、定义一维数组
(1)一般形式
类型符 数组名[常量表达式]
(2)注意事项
①数组名的命名规则和变量名相同,遵循标识符命名规则;
②方括号中的常量表达式用来表示元素的个数,即数组长度;
③常量表达式中可以包括常量和符号常量,不能包含变量。
(3)存储形式
数组的存储形式如下图所示:
- 2、引用一维数组
引用一维数组的表述形式为:
数组名[下标] - 3、一维数组的初始化
可以用“初始化列表”方法实现数组的初始化,一般有:
(1)在定义数组时对全部数组元素赋予初值。例如:
int a[10]={0,1,2,3,4,6,7,8,9};
(2)可以只给数组中的一部分元素赋值,未赋值的元素值为0。
(3)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
6.2 定义和引用二维数组
- 1、定义二维数组
(1)基本概念
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式];
(2)元素存放方式
C语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,接着再存放第二行的元素。
如:a[3][4]数组存放的顺序如下图所示:
假设数组a存放从2000字节开始的一段内存单元中,一个元素占4个字节,则其存放形式如下图所示:
(3)多维数组
C语言中还允许使用多维数组。例如float a[2][3][4]; - 2、引用二维数组的元素
(1)表示形式
数组名[下标][下标]
(2)引用
数组元素可以出现在表达式中,也可以被赋值,例如:
b[1][2]=a[2][3]/2; - 3、二维数组的初始化
可以用“初始化列表”对二维数组初始化。
(1)分行给二维数组赋初值。例如:
(2)可以将所有的数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如:
(3)可以对部分元素赋初值。例如:
int a[3][4]={{1},{5},{9}};,其余元素为0。
(4)如果对全部元素都符初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
6.3 字符数组
- 1、定义字符数组
定义字符数组的方式:
类型说明符 数组名[常量表达式];
例如:
char a[10]; - 2、字符数组的初始化
(1)将各个字符依次赋给数组中的各元素。例如:
(2)花括号内提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即’\0’)。
(3)如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度。
(4)也可以定义和初始化一个二维字符数组。 - 3、字符串和字符串结束标志
(1)字符串结束标志
C语言在遇到字符’\0’时,表示字符串结束,把它前面的字符组成一个字符串。C系统在用字符数组存储字符串常量时会自动加一个’\0’作为结束符。
(2)字符串给字符数组赋值
对字符数组初始化的方法补充一种方法,即用字符串常量来使字符数组初始化,赋值时有以下情况:
①若数组没有指定大小,则数组最后由系统自动加上一个’\0’;
②若数组指定大小,则未被赋值的元素会自动赋值为’\0’,如:
其存储情况如下:
- 4、字符数组的输入输出
(1)输入输出方法分类
①逐个字符输入输出
用格式符“%c”输入或输出一个字符。
②将整个字符串一次输入或输出
用“%s”格式符,意思是对字符串(string)的输入输出。
(2)详细说明
①输出的字符中不包括结束符’\0’;
②用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名;
③如果数组长度大于字符串的实际长度,也只输出到遇’\0’结束;
④如果一个字符数组中包含一个以上’\0’,则遇第一个’\0’时输出就结束。 - 5、字符串处理函数
(1)puts函数------输出字符串的函数
puts(字符数组);
其作用是将一个字符串(以’\0’结束的字符序列)输出到终端。
(2)gets函数------输入字符串的函数
gets(字符数组);
(3)strcat函数------字符串连接函数
strcat(字符数组1,字符数组2);
其作用是把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值,即字符数组1的地址。
说明:
①字符数组1必须足够大,以便容纳连接后的新字符串。
②连接前两个字符串的后面都有’\0’,连接时将字符串1后面的’\0’取消,只在新串最后保留’\0’。
(4)strcpy和strncpy函数------字符串复制函数
strcpy(字符数组1,字符串2);
它表示“字符串复制函数”,作用是将字符串2复制到字符数组1中去。
说明:
①字符数组1必须定义得足够大,以便容纳被复制的字符串2。
②“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,也可以是一个字符串常量。
③可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去。例如:
strncpy(str1,str2,2);
(5)strcmp函数------字符串比较函数
①一般形式
strcmp(字符串1,字符串2);
②比较规则
将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到’\0’为止。
a. 如全部字符相同,则认为两个字符串相等;
b. 若出现不相同的字符,则以第1对不相同的字符的比较结果为准。
③比较结果
a. 如果字符串1=字符串2,则函数值为0;
b. 如果字符串1>字符串2,则函数值为一个正整数;
c. 如果字符串1<字符串2,则函数值为一个负整数。
(6)strlen函数------测字符串长度的函数
strlen(字符数组);
函数的值为字符串中的实际长度(不包括’\0’在内)。
(7)strlwr函数------转换为小写的函数
strlwr(字符串);
(8)strupr函数------转换为大写的函数
strupr(字符串);
说明:在使用字符串处理函数时,应当在程序文件的开头用#include<string.h>把“string.h”文件包含到本文件中。