数组
一维数组
定义
类型名 数组名[常量表达式] /* int a[10] */
说明:
- 类型名是数组各元素的类型。
- []是数组的标志。
- 常量表达式表示数组元素的个数,即数组的长度。
- C语言规定数组的下标从0开始。
- C语言不允许对数组的大小进行动态定义。
- 数组一经定义就在内存中分配一块连续的存储空间,一维数组是按下标由小到大的顺序存放的。
引用
数组名[下标] /* a[0] */
说明:
- 下标可以是整型常量或是整型表达式。
- 数组只能逐个元素引用,不能用数组名一次引用整个数组。数组名代表数组在内存分配的存储空间的首地址。
- 数组带下标后就是一个具体的元素,相当于一个简单变量,也称“下标变量”。
初始化
在定义数组时,可以同时给数组元素赋初值。
给全部元素赋初值:
int a[5]={1,2,3,4,5}
给部分元素赋初值:
int a[10]={1,2,3,4,5} /* 初值个数少于数组大小时,自动给后面的元素补0 */
说明:
- 赋初值的个数不能大于数组的大小。
- 当赋初值的个数与所定义数组的大小相等时,定义时可以省略数组的大小。
二维数组
二维数组在逻辑上相当于一个矩阵或一个具有行和列的表格。
定义
类型名 数组名[常量表达式1][常量表达式2] /* int a[3][4] */
说明:
- 常量表达式1称为矩阵的行数,常量表达式2称为矩阵的列数。二维数组的个数即为行数与列数的乘积。
- 二维数组在内存中同样占用一块连续的存储空间,并采用“按行存放”的方式,即先顺序存放第0行的各元素,再顺序存放第n行的各元素。
- C语言允许使用多维数组。
引用
数组名[下标1][下标2] /* a[0][1] */
若要引用二维数组的全部元素,通常使用双重循环来配合:
int a[3][4],i,j; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j])
初始化
按行书写的方式给二维数组的全部元素赋初值:
int a[2][3]={{0,0,0},{1,1,1}};
顺序书写的方式给二维数组的全部元素赋初值:
int a[2][3]={1,2,3,4,5,6}
给每行的部分元素赋初值:
int a[2][3]={{0,0},{1,1}};
给部分行的部分元素赋初值:
int a[4][3]={{1,2},{3,4}}
给部分元素赋初值:
int a[4][3]={1,2,3,4,5}
说明:
对于二维数组,也可以通过赋初值的个数来定义数组的大小。
采用顺序书写赋初值时,第一维的大小按以下规定:
当初值的个数能被第二维的大小除尽时,所得商数就是第一维的大小;当初值的个数不能被第二维的大小除尽时,所得商数+1就是第一维的大小。
int c[][3]={1,2,3,4,5,6} /* =int c[2][3] */
用字符数组来存放字符串
C语言提供了字符串常量,系统在存储字符串时自动在其末尾添加转义字符‘ ‘来作为字符串结束的标志。’ ’的ASCII代码值为0,它占用存储空间,但不计入字符串的实际长度。
C语言没有提供字符串变量,一般情况下,我们将字符串存于字符数组变量中进行处理。
将字符串存于字符数组的方法
通过赋值运算将字符逐个赋给各元素后,再在其末尾加入‘ ‘:
char c[6]; c[0]='h';c[1]='e';c[2]='l';c[3]='l';c[4]='o';c[5]=' '; /* 或 */ char c[6]={'h','e','l','l','o'}; /* 末尾自动补0 */
通过给字符数组输入字符并在最后加入' ':
char c[6]; int i; for(i=0;i<5;i++) scanf("%c",&c[i]); c[i]=' '
赋初值时直接赋字符串:
char c[6]={"hello"}; char c[6]="hello"; char c[]="hello"
字符数组的输入和输出
- 在scanf()函数和printf()函数中使用格式说明符%c,来进行逐个输入或输出。
- 在scanf()函数和printf()函数中使用格式说明符%s,来进行字符串整体的输入和输出。
说明:
- 用%s格式符输入字符串时,空格和回车都作为输入数据的分隔符而不被输入。若输入字符串中包含空格,可以采用gets()函数。
- 输入的字符串应短于字符数组的定义长度,若输入字符串的长度超出字符数组所能容纳的字符个数时,虽然系统不报错,但下标越界,应避免。
- 当输入项时一数组元素的地址时,输入数据将从这一元素开始存放,并且要有足够的存储单元存放所属的字符及字符床结束标志。
get()、puts()函数,从终端进行字符串的输入和输出
get()函数的调用形式
get(str_addr);
说明:
- str_adr时存放输入字符串的起始地址,他可以是字符数组名或字符数组元素的地址。
- gets()函数用来从终端读入字符串(包含空格符),直到读入一个换行符为止。
put()行数的调用形式
puts(str_adr);
调用puts()函数时,将从字符串起始地址开始依次输出存储单元中的字符,直到遇到' '时结束,并自动输出一个换行符。
用于字符串处理的函数
- 字符串拷贝函数:strcpy()
- 字符串连接函数:strcat()
- 字符串比较函数:strcmp()
- 字符串求长度函数:strlen()
- 字符串大小写转换函数:strlwr()、strupr()