数组:
1.一组数据类型相同的元素的集合
1)数据类型相同 2)地址连续
2.定义:存储类型(auto,extern,register,static) 数据类型 (int char) 数组名;
3.数据类型:去掉变量名就是数据类型
4.数组名:1)数组名代表的是数组首元素的地址 2)代表的是整个数组
元素个数:必须是一个确定的数(常量)
5. 初始化 (在进行全部初始化的时候,数组元素的个数可以省略)
int a[5] = {1,2,3} 部分初始化
int a[5] = {1,2,3,4,5} 全部初始化
6.数组的访问: 数组名[下标]; 下标必须从零开始
字符数组
1.字符数组的本质:字符串(以’\0’做为结束符)
存储类型 数据类型 数组名[元素个数];
char str[5] = {0};//最多能存放4个元素,留一个位置给’\0’
char str[6] = {‘h’,’e’,’l’,’l’,’o’,’\0’};
char str[6] = {“hello”};
2.字符组的数入输出
格式化符:%s
puts(数组名);
功能:将数组中的字符串打印到终端上,会自动添加换行符
注意:遇到’\0’结束
gets(数组名);
功能:将键盘输入的字符串保存到数组中,会自动在末尾添加’\0’
注意:gets不会进行越界检查,输入的时候注意不要越界
1、scanf和gets的区别:
scanf是以空格、回车、Tab键作为结束符,而gets是以回车作为结束符
缓冲区:
gets输入完成会自动清空缓冲区
scanf输入完成之后,缓冲区会遗留空格、回车、Tab键
gets输入之前,先会查看缓冲区中是否有内容,有的话直接拿过来使用
scanf是标准输入函数,每一次输入都需要从键盘获取
字符串的处理函数
strlen、strcpy、strcat、strcmp
头文件:#include <string.h>
1.strlen(数组名/字符串);
功能:求字符串的实际长度
返回值:返回字符串的实际长度,不包含’\0’
2.strcpy(数组1,数组2/字符串2)
功能:将数组2或者字符串2拷贝到数组1中
注意:(1)数组1足够大 (2)完全拷贝,会将数组2/字符串2的’\0’也拷贝过去
strncpy(数组1,数组2/字符串2,n);
功能:将数组2/字符串2的前n个字符拷贝到数组1中
注意:不包含’\0’
3.strcat(数组1,数组2/字符串2);
功能:将数组2/字符串2连接到数组1之后
注意:(1)数组1的容量足够大 (2)数组1中的‘\0’会被覆盖
strncat(数组1,数组2/字符串2,n);
功能:将数组2/字符串2的前n个字符连接到数组1之后
4.strcmp(数组1/字符串1,数组2/字符串2);
功能:比较两个字符串的大小
返回值:
大于0:字符串1 > 字符串2
等于0:字符串1 == 字符串2
小于0:字符串1 < 字符串2
比较规则:从左至右,依次比较每个字符的ASCII码值,直到遇到不同的ASCII码或者’\0’结束
strncmp(数组1/字符串1,数组2/字符串2,n);
功能:比较字符串的前n个字符的大小
二维数组
2.1 概念
元素为一维数组的数组(数组的数组)
(1)数据类型相同 (2)地址连续
2.2 定义
存储类型 数据类型 数组名[元素个数];
存储类型 数据类型 数组名[行数][列数];
行数:有几个一维数组
列数:一维数组中有几个元素
int a[2][3];
//定义了一个二维数组,该数组有两个元素,每一个元素是由3个int型的元素组成的
部分初始化
int a[2][3] = {1,2,3};
全部初始化
int a[2][3] = {1,2,3,4,5,6};
int a[2][3] = {{0},{4,5,6}};
访问
数组名[下标]; 注意:下标必须从0开始
输入输出
二维字符数组
char str[30] = {0};
scanf(“%s”,str);
printf(“%s”,str);
存储类型 数据类型 数组名[行数][列数];
char str[5][20]; //定义了一个长度为5的数组,数组中的每一个元素又是一个长度为20的char型元素