数组
用一段连续空间 存放相同类型的变量 这样的容器(结构)叫数组。
数组的下标是从0开始。
加入数组有n个元素:
下标范围:0~n-1
元素范围:arr[0]~arr[n-1]
一维数值数组的定义
案例1:定义一个数组 有5个元素 每个元素为int
int arr[5];
案例2:定义一个数组 有5个元素 每个元素为int *
int *arr[5];
案例3:定义一个数组 有5个元素 每个元素为数组,该数组有10个元素每个元素为int
c
int arr[5][10];案例4:定义一个数组 有5个元素 每个元素为函数的入口地址,该函数有两个int型形参,
int返回值类型
c
int (*arr[5])(int, int);一维数值数组的初始化
1、全部元素初始化
c
int arr[5]={10,20,30,40,50};注意:如果数组的全部元素 都初始化 可以省略[]的数值
如果省略了[]里面数值 数组的元素个数 就由初始化的元素个数确定
c
int arr[]={10,20,30,40,50};2、部分元素 初始化
1、未被初始化的部分 自动补0
c
int arr[5]={10,20,30};2、建议将数组的所有元素初始化为0
c
int arr[5]={0};//将第0个元素初始化为0 其他未被初始化自动补0 推荐
int arr[5]={10};//10 0 0 0 03、指定下标初始化(了解)
c
int arr[5]={[2]=10, [4]=30};//0 0 10 0 30一维数值数组的元素操作
元素的操作 对元素的读或写
scanf("%d" , &arr[i])二维数值数组的初始化
分段初始化
c
1 //完全初始化
2 int arr[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };
3 //如果完全初始化 只能省略行数
4 int arr[][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };
5
6 //部分初始化
7 int arr[3][4]={ {1,2}, {5,6}, {9,10,11} };完全初始化
c
1 /完全初始化
2 int arr[3][4]={ 1,2,3,4, 5,6,7,8, 9,10,11,12};
3 //如果完全初始化 只能省略行数
4 int arr[][4]={1,2,3,4, 5,6,7,8, 9,10,11,12};
5
6 //部分初始化
7 int arr[3][4]={ 1,2, 5,6, 9,10,11};一维字符数组
字符串的方式 初始化 一维字符数组(推荐) 描述的是字符串, 比如字符串"hello", 编译器会自动在字符串的末尾 添加'\0'字符 作为字符串的结束标记
c
char arr[6]="hello";c
1 char arr[6]="hello";
2 printf("%s", arr);键盘获取字符数组
1.scanf 和 %s获取字符串 遇到空格或回车 结束输入
2.获取带空格的 字符串 gets (建议别用 可能会溢出)
3、fgets函数 可以获取带空格的字符串 安全
c
char *fgets(char *s, int size, FILE *stream)s:表示空间的起始位置
size:表示的能获取的最大字节数size-1
stream:表示设备(
stdin 标准输入设备(终端))

fgets 能获取带空格的字符串 遇到回车(达到最空间大值)会结束获取,注意fgets会提取回车

一些案例
1. 获取一个字符串 求该字符串的长度(不适用strlen)

2、有两个字符数组str1 str2。str1获取键盘输入,输入后将str1的字符串,拷贝到 str2中(不允许使用strcpy)

3、有以下两个数组str1,str2 将str2的字符串 追加到 str1的尾部

4、从字符串中查找某个元素(第一次出现的下标)

二维字符数组
c
1 char str[128]="hello";
2
3 char arr[5][128]={"hello","world", "hehehe", "xixixi", "lalala"};c
1 void test01()
2 {
3 char arr[5][128] = {""};
4 int row = sizeof(arr) / sizeof(arr[0]);
5 int col = sizeof(arr[0]) / sizeof(arr[0][0]);
6
7 //获取字符数
8 printf("请输入%d个字符串\n", row);
9 int i = 0;
10 for (i = 0; i < row; i++)
11 {
12 // scanf("%s", &arr[i][0]);
13 scanf("%s", arr[i]);
14 }
15
16 printf("‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n");
17 //遍历二维字符数组
18 for (i = 0; i < row; i++)
19 {
20 //arr[i] 代表的是 每一行的第0列的列地址
21 printf("%s\n", arr[i]);
22 }
23 }
阿源的知识库