Skip to content

数组 ​

用一段连续空间 存放相同类型的变量 这样的容器(结构)叫数组。

数组的下标是从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 0

3、指定下标初始化(了解)

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 }