数组
数组的概念
什么是数组
数组是相同类型,有序数据的集合

数组的特征

- 数组中的数据被称之为数组的元素(数组中的每一个匿名的变量空间),是同样的
- 数组中的元素存放在内存空间建(char player_name[6]:申请在内存中开辟6块连续的基于char类型的变量空间)
衍生概念:下标(索引)
-
下标或者索引代表了数组中元素距离第一个元素的(首地址所在元素)偏移量。举例:第一个元素距离第一个元素的偏移量为0,所以数组的下标是从0开始的
-
数组中元素的地址值,下标越大,地址值越大。(每一块内存空间都有一个独有的内存地址,内存中每8个bit也就是1字节编一个号,这个号就是我们所说的内存地址)
-
数组的下标是从0开始的。
一维数组
数组的定义
语法:
c
类型说明符/数据类型 数组名[数组容量]
说明:
- 数组的类型说明符由数组中的元素来决定,类型说明符也就是数 据类型,元素是什么类型,数组就是什么类型。同一个数组中,所有元素的类型都是一致的。
- 数组名也是标识符,我们所说的数组(名),大家可以理解为数据类型是数组的变量(名)。命名规则与变量名相同,遵循标识符命名规则(标识符命名规则:不能以数字开头,只能有数字、字母、下划线)。
- 数组容量也可以叫做常量表达式或者元素个数,其值必须为整型,可以包含常量和符号常量,但不能是变量
c
int size = 10;
int arr[size];
size = 22;
printf("%d",size);
举例:
c
#define SIZE 4;//符号常量
写法1,符号常量:int arr[SIZE];
写法2,常量:int size = 10; int arr[size];
写法3,常量:int arr[4]; int lcd[800*480];
类型:
代表了数组中元素的类型
容量:
数组中能存储多少个元素,数组容量可以是一个常量、常量表达式,还可以是符号常量,但必须是整型。
深入理解:
- 定义一个数组,相当于申请了一个可以容纳所指定元素数量的内存单元。所申请的内存单元室连续的。
- 定义一个数组,相当于定义了多个匿名的变量,这些变量可以通过
数组名[下标]
来访问
范例:
c
//定义一个数组
int arr[10];//此时只是在内存中申请了10个元素所对应的空间,此时里面的值是随机值,大概率是0
//上面数组中,最小下标是0,最大下标是9
经过上面案例,分析得到:
c
数组的最大下标 = 数组元素个数(数组容量-1)
数组元素的访问
原则:数组中的元素不能一次性访问所有,只能 一个一个的访问。
访问方式:
c
数组名[下标];
举例:
c
//定义一个容纳10个元素的int型数组
int arr[10];
//给数组的第一个元素进行赋值 存数据
arr[0] = 89;
//访问数组中的第一个元素 取数据
int a = arr[0];
int c = arr[9];//0
int b = arr[10];//error:下标越界异常,所以使用数组的过程中一定要做一个下标越界校验,否则报错
注意:数组元素的访问一定不能越界
案例:
-
需求:利用循环结构给数组元素a[0]-a[9]赋值0-9,并且逆序输出。
-
代码:
c/************************************************************************* > File Name: demo01.c > Author: dachui > Description: 一维数组的案例 > Created Time: 2025年02月14日 星期五 10时53分16秒 ************************************************************************/ #include <stdio.h> int main(int argc,char *argv[]) { //创建一个数组,用来存放0-9的数字 int a[10]; //使用for循环给数组元素赋值(一般数组配套的都是for循环) //C语言中,没有提供数组的大小,需要我们自己计算,数组大小 = 数组总字节数/ 一个元素的字节数 int len = sizeof(a) / sizeof(a[0]);//sizeof返回字节大小 等价与 int len = sizeof(a)/sizeof(int); for(int i = 0;i < len;i++) { a[i] = i; } //逆序输出 //遍历:通过循环将数组中的元素一个一个取出来 for(int j = len -1;j >= 0;j--) { printf("%4d",a[j]); } printf("\n");//纯换行 return 0; }
-
运行结果
数组的初始化
定义数组的同时,用指定数据来给对应的元素赋值
简化数组定义后,需要对元素一一赋值操作
语法规则:
c
数据类型 数组名[数组容量] = {常量1,常量2,常量3...};

注意事项:
-
数组可以部分初始化,也就是可以给数组中前几个元素初始化,未被初始化的元素系统 将大概率自动初始化,大概率是0;如果定义数组时未指定数据容量,则系统会根据初始化元素的个数来决定数组容量
c//1.如果定义数组时只给数组前几个初始化,后续剩余元素会自动完成初始化,大概率赋0 int arr[10] = {11,12,1,3,14,15};//推荐写法,等价于 int arr[10] = {11,12,13,14,15,0,0,0,0,0}; //2.如果定义数组时未指定数据的容量,根据初始化元素个数决定容量 int arr[] = {11,12,13,14,15};//推荐写法,等价于 int arr[5] = {11,12,13,14,15};
-
柔性数组:
标准理解:柔性数组的概念是在C99标准,针对结构体的最后一个成员可以是一个未指定大小的数组。
广义简单理解:数组容量待定或者待确定的数组,举例:
int arr[] = {1,2,3,4,5}
一维数组的案例
案例:
-
需求:斐波那契数列
-
分析:1+1+2+3+5...就是斐波那契数列
-
代码:
c
/*************************************************************************
> File Name: demo02.c
> Author: dachui
> Description: 一维数组案例
> Created Time: 2025年02月14日 星期五 11时35分54秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;//循环变量
//定义一个数组用来存储斐波那契数列,默认存储的第1和第2的值是1
int f[20] = {1,1};
//获取数组的大小
int len = sizeof(f) / sizeof(f[0]);
//使用for循环,将生成的数据存入数组
for(i = 2;i < len;i++)
{
f[i] = f[i-2]+f[i-1];//给数组元素赋值,从数组的第三个元素开始
}
//遍历数组
for(i = 0;i < len;i++)
{
//遍历的时候,要求每5个换一行,也就是一行显示5个
if(i % 5 == 0)
{
printf("\n");
}
printf("%8d",f[i]);
}
printf("\n");
return 0;
}
运行结果
