一、一维字符型数组
1. 字符数组的概念
在C语言中:
字符数组就是用于存储字符的一维数组。
例如:
char name[10];表示定义一个字符数组,可以存储10个字符。
数组中的每个元素都是:
char类型。
例如:
char str[5];内存结构:
str ↓ +---+---+---+---+---+ | | | | | | +---+---+---+---+---+ 0 1 2 3 4每个位置可以保存一个字符。
二、字符数组初始化
字符数组初始化有多种方式。
1. 使用字符逐个初始化
例如:
char str[5]={'h','e','l','l','o'};数组内容:
h e l l o对应:
str[0]='h' str[1]='e' str[2]='l' str[3]='l' str[4]='o'2. 使用字符串初始化
C语言中可以直接使用字符串初始化字符数组。
例如:
char str[]="hello";编译器会自动计算数组长度。
实际上:
char str[]="hello";等价于:
char str[6]={'h','e','l','l','o','\0'};注意:
最后多出了一个:
'\0'三、字符串结束标志 '\0'
1. 什么是字符串?
在C语言中:
字符串是以'\0'结尾的字符数组。
例如:
char str[]="hello";内存:
h e l l o \0其中:
'\0'表示字符串结束。
2. 为什么需要'\0'?
例如:
char str[5]={'h','e','l','l','o'};虽然保存了hello。
但是C语言不知道字符串在哪里结束。
而:
char str[6]={'h','e','l','l','o','\0'};表示:
hello结束因此:
'\0'是C语言判断字符串结束的重要标志。
四、字符数组的输入输出
1. 使用循环输入字符
例如:
输入5个字符:
#include<stdio.h> int main() { char str[5]; int i; for(i=0;i<5;i++) { scanf("%c",&str[i]); } return 0; }2. 使用%s输入字符串
C语言中:
scanf("%s",str);可以直接输入字符串。
例如:
#include<stdio.h> int main() { char name[20]; scanf("%s",name); printf("%s",name); return 0; }输入:
Tom输出:
Tom注意:
使用scanf("%s")输入字符串时:
- 遇到空格会结束;
- 不能输入带空格的字符串。
例如:
输入:
hello world只能读取:
hello五、字符数组常用函数
C语言提供了字符串处理函数,需要包含:
#include<string.h>1. strlen() 求字符串长度
功能:
计算字符串有效字符数量。
例如:
#include<stdio.h> #include<string.h> int main() { char str[]="hello"; printf("%d",strlen(str)); return 0; }输出:
5注意:
strlen不会计算:
'\0'2. strcpy() 字符串复制
格式:
strcpy(目标字符串,源字符串);例如:
char a[20]; char b[]="hello"; strcpy(a,b);执行后:
a="hello"3. strcat() 字符串连接
功能:
将两个字符串连接。
例如:
char a[20]="hello"; char b[]="world"; strcat(a,b);结果:
helloworld4. strcmp() 字符串比较
格式:
strcmp(str1,str2);返回值:
- 0:相等
- 大于0:str1大
- 小于0:str1小
例如:
strcmp("abc","abc")结果:
0六、二维整型数组
1. 二维数组概念
前面学习的一维数组:
类似:
一排数据例如:
1 2 3 4二维数组:
类似:
表格例如:
1 2 3 4 5 6 7 8 9二维数组可以表示:
- 矩阵;
- 表格;
- 游戏地图;
- 图像数据。
七、二维数组定义
格式:
数据类型 数组名[行数][列数];例如:
int a[3][4];表示:
3行4列的二维数组。
结构:
列 0 1 2 3 0 □ □ □ □ 1 □ □ □ □ 2 □ □ □ □共有:
3×4=12个元素。
八、二维数组元素访问
访问格式:
数组名[行][列]例如:
a[1][2]表示:
第2行第3列元素。
注意:
数组下标从0开始。
例如:
int a[2][3]; a[0][0]=10; a[1][2]=20;九、二维数组初始化
1. 完全初始化
例如:
int a[2][3]= { {1,2,3}, {4,5,6} };表示:
1 2 3 4 5 62. 省略行数
可以省略第一维:
int a[][3]= { {1,2,3}, {4,5,6} };编译器自动计算行数。
3. 部分初始化
例如:
int a[2][3]={{1,2}};结果:
1 2 0 0 0 0没有赋值的位置自动为0。
十、二维数组遍历
二维数组通常使用双重循环。
例如:
输出二维数组:
#include<stdio.h> int main() { int a[2][3]= { {1,2,3}, {4,5,6} }; int i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++) { printf("%d ",a[i][j]); } printf("\n"); } return 0; }输出:
1 2 3 4 5 6十一、二维数组应用——矩阵
二维数组非常适合表示矩阵。
例如:
A= 1 2 3 4可以表示:
int A[2][2];在图像处理、机器人、人工智能领域:
二维数组也经常用于表示:
- 图像像素;
- 地图信息;
- 状态空间。