目录
数组的分类
1.按照元素的类型分类
字符数组:
短整型的数组:
整型的数组:
长整型的数组:
浮点型的数组:
指针数组
结构体数组
2.按维数分类
一维数组
二维数组
多维数组
3.数组的定义
一维数组的定义:
二维数组的定义:
4.数组的初始化
4.1一维数组的初始化
4.2 二维数组的定义并初始化
5.数组元素的引用方法
一维数组元素的引用方法
二维数组元素的引用方法
字符数组
字符数组的初始化
字符串方式的初始化
二维字符数组
字符串方式的二维数组初始化
总结
从0开始记录我的学习历程,我会尽我所能,写出最最大白话的文章,希望能够帮到你,谢谢。
提示:文章作者为初学者,有问题请评论指正,感谢。
数组的分类
1.按照元素的类型分类
-
字符数组:
- 字符数组用来存储字符类型的元素,比如文字和字符串。
- 例子:
char name[10] = "Copilot";
这里name
就是一个可以存储10个字符的数组。
-
短整型的数组:
- 短整型数组用来存储
short int
类型的元素,它比普通的整型占用的内存空间小。 - 例子:
short int ages[5] = {23, 45, 30, 18, 21};
这里ages
是一个可以存储5个短整型数的数组。
- 短整型数组用来存储
-
整型的数组:
- 整型数组用来存储
int
类型的元素,这是最常见的数组类型。 - 例子:
int scores[3] = {85, 90, 78};
这里scores
是一个可以存储3个整数的数组。
- 整型数组用来存储
-
长整型的数组:
- 长整型数组用来存储
long int
类型的元素,它比整型占用的内存空间大。 - 例子:
long int big[2] = {1000000, 2000000};
这里big
是一个可以存储2个长整型数的数组。
- 长整型数组用来存储
-
浮点型的数组:
- 浮点型数组用来存储小数,分为单精度
float
和双精度double
。 - 例子:
float prices[4] = {1.99, 2.99, 3.99, 4.99};
这里prices
是一个可以存储4个单精度浮点数的数组。 - 双精度例子:
double weights[3] = {55.5, 60.6, 65.7};
这里weights
是一个可以存储3个双精度浮点数的数组。
- 浮点型数组用来存储小数,分为单精度
-
指针数组
- 指针数组用来存储指针,即存储了其他变量地址的变量。
- 例子:
int* ptrs[3];
这里ptrs
是一个可以存储3个整型指针的数组。 - 指针数组,就是一个数组,但它存储的是地址,而不是普通的数据。
- 例子:假设你有三本书,每本书在图书馆的一个位置。你可以用一个小纸条记录每本书的位置,这三个小纸条放在一起,就形成了一个“指针数组”。
结构体数组
- 结构体数组用来存储结构体类型的元素,结构体是一种自定义的数据类型,可以包含多个不同类型的数据。
- 例子:
- 结构体数组,是一个数组,里面的每个元素都是一个“包裹”,这个“包裹”可以装很多不同的东西。
struct Student { char name[50]; int age; float score; }; struct Student class[20]; // 这里 `class` 是一个可以存储20个学生信息的结构体数组。
- 结构体数组,是一个数组,里面的每个元素都是一个“包裹”,这个“包裹”可以装很多不同的东西。
- 例子:假设你要记录你的五个朋友的信息,每个朋友都有名字、年龄和电话号码。你可以用一个笔记本,每一页记录一个朋友的所有信息,这个笔记本就像一个“结构体数组”。
2.按维数分类
一维数组
int a[30];
就像是一排平房,每个平房都是一个独立的房间。在这个数组里,你有30个房间,编号从0到29。你可以在每个房间里放东西,比如数字。
int flat[30]; // 这就像是有30个房间的一排平房
二维数组
int a[2][30];
可以想象成一栋两层的楼房,每层有30个房间。这就像是你有两排平房叠加在一起。在C语言中,你可以通过两个数字来访问这些房间,第一个数字告诉你是哪一层,第二个数字告诉你是哪个房间。
int building[2][30]; // 这就像是一个有两层,每层有30个房间的楼房
如果你想进入第一层的第十个房间,你可以通过 building[0][9]
来访问,因为在C语言中,数组的索引是从0开始的。
多维数组
int a[4][2][10];
就像是一个更大的楼房群。想象你有一个小区,里面有4栋楼,每栋楼有2层,每层有10个房间。在这个数组里,你需要三个数字来确定一个房间的位置:哪栋楼、哪一层、哪个房间。
int complex[4][2][10]; // 这就像是一个有4栋楼,每栋楼有2层,每层有10个房间的小区
所以,当你看到 int a[5][4][2][10];
这样的四维数组时,你可以想象成一个更大的社区,有5个小区,每个小区有4栋楼,每栋楼有2层,每层有10个房间。你需要四个数字来找到一个特定的房间。
3.数组的定义
定义一个数组,在内存里分配空间。
一维数组的定义:
在C语言中,数组是一系列相同类型数据的集合。当你定义一个数组时,你通常会告诉计算机两件事:这个数组里的数据是什么类型的,以及数组里有多少个数据。
比如说,int a[10];
这行代码就像是你告诉计算机:“嘿,我需要一个能存放10个整数的空间。” 这里的 int
表示数组里的数据都是整数类型,a
是这个数组的名字,[10]
告诉计算机数组里有10个整数。
同样的,char b[5];
这行代码就像是你说:“我需要一个能存放5个字符的空间。” char
表示字符类型,b
是数组的名字,[5]
表示数组里有5个字符。
现在,有趣的部分来了。在C语言中,你其实不需要一开始就告诉计算机数组里有多少个数据。如果你在定义数组的时候就给它赋值,计算机会自动数一数你给了多少个数据,然后创建一个刚好能放下这些数据的数组。
看看这个例子:
#include <>
int main(int argc, char *argv[]) {
int a[] = {1, 2, 3, 4, 5}; // 注意这里没有写[5]
printf("%d\n", sizeof(a)); // 这里会打印出数组a占用的总字节数
return 0;
}
在这个例子里,int a[] = {1, 2, 3, 4, 5};
这行代码就像是你告诉计算机:“我有这些数字,1, 2, 3, 4, 5,请你给我一个能放下它们的空间。” 你没有说需要多大的空间,但是因为你给了5个数字,计算机就会创建一个能存放5个整数的数组。
printf("%d\n", sizeof(a));
这行代码会打印出数组 a
占用的总字节数。因为 a
是一个整数数组,每个整数在大多数计算机上占用4个字节,所以这个数组总共占用20个字节(5个整数 * 4个字节/整数 = 20字节)。
二维数组的定义:
首先,二维数组的定义就像是你在告诉计算机:“我需要一个表格。” 这个表格由行和列组成,就像是一个棋盘或者电影院的座位图。在C语言中,你会这样定义一个二维数组:
int a[4][5];
这里的 int
表示表格里每个格子都要存放一个整数。a
是这个表格的名字。[4][5]
告诉计算机这个表格有4行和5列,总共20个格子。
现在,如果你想给这个表格里的每个格子赋一个初始值,你可以这样写:
int a[4][5] = {
{1, 2, 3, 4, 5}, // 第一行的值
{6, 7, 8, 9, 10}, // 第二行的值
{11, 12, 13, 14, 15}, // 第三行的值
{16, 17, 18, 19, 20} // 第四行的值
};
但是,在C语言中,有一个很酷的特性:如果你在定义二维数组时就给它赋值,你可以不用告诉计算机有多少行,只需要告诉它每行有多少列。计算机会自动根据你提供的数据来确定行数。就像这个例子:
#include <>
int main(int argc, char *argv[]) {
int a[][3] = {
{1, 2, 3}, // 第一行
{4, 5, 6}, // 第二行
{7, 8, 9}, // 第三行
{10, 11, 12} // 第四行
};
printf("%d\n", sizeof(a)); // 打印出数组a占用的总字节数
return 0;
}
在这个例子中,int a[][3]
这行代码告诉计算机:“我要一个表格,每行有3列,但我不告诉你有多少行,你自己数一数我给的数据,然后决定行数。” 因为我们提供了4行数据,计算机就会创建一个有4行3列的表格。
printf("%d\n", sizeof(a));
这行代码会打印出这个表格占用的总字节数。在这个例子中,因为 a
是一个整数数组,每个整数占用4个字节,所以这个表格总共占用48个字节(4行 * 3列 * 4字节/整数 = 48字节)。
4.数组的初始化
4.1一维数组的初始化
定义数组的时候,顺便给数组的元素赋初值,即开辟空间的同时并且给数组元素赋值。
在C语言中,初始化一个一维数组就像是你给一排房间分配房客。你可以决定每个房间住哪些房客,也可以只安排前几个房间,剩下的房间就会自动空着(在C语言中,空着就是0)。
全部初始化的情况就像是你有一个有5个房间的房子,你决定了每个房间的房客是谁:
int a[5] = {2, 4, 7, 8, 5}; // 每个房间都有指定的房客
这里,a[0]=2
就像是第一个房间住了编号为2的房客,a[1]=4
就是第二个房间住了编号为4的房客,以此类推。
部分初始化的情况就像是你只决定了前几个房间的房客,剩下的房间就会自动空出来:
int a[5] = {2, 4, 3}; // 只指定了前三个房间的房客
在这个例子中,a[0]=2
, a[1]=4
, a[2]=3
表示前三个房间有房客,而 a[3]=0
, a[4]=0
表示第四个和第五个房间是空的。
例子:
#include <>
int main(int argc, char *argv[]) {
int a[5] = {2, 3, 5}; // 只指定了前三个房间的房客
int i;
for(i = 0; i < 5; i++) {
printf("a[%d] = %d\n", i, a[i]); // 这里会打印出每个房间的房客编号
}
return 0;
}
这段代码就像是你在检查每个房间的房客。你从第一个房间开始,一直检查到第五个房间。因为你只指定了前三个房间的房客,所以第四个和第五个房间会显示为0,表示没有房客。
当你运行这段代码时,它会打印出:
a[0] = 2
a[1] = 3
a[2] = 5
a[3] = 0
a[4] = 0
4.2 二维数组的定义并初始化
首先,二维数组就像是一个小公寓楼,每层有几个房间。在C语言中,你可以创建一个这样的公寓楼,并且决定每个房间里放什么。
按行初始化的情况:
a、全部初始化:
int a[2][2] = {{1, 2}, {4, 5}};
这就像是你有一个两层的公寓楼,每层有两个房间。你决定了每个房间的房客是谁。a[0][0] = 1
就像是第一层的第一个房间住了编号为1的房客,a[0][1] = 2
是第一层的第二个房间住了编号为2的房客,以此类推。
b、部分初始化:
int a[3][3] = {{1, 2}, {1}};
这就像是你有一个三层的公寓楼,每层有三个房间。你只决定了第一层的前两个房间和第二层的第一个房间的房客。剩下的房间自动空出来(在C语言中,空着就是0)。所以,a[0][0] = 1
表示第一层的第一个房间住了编号为1的房客,a[0][1] = 2
是第一层的第二个房间,而 a[0][2] = 0
表示第一层的第三个房间是空的,因为你没有指定。
逐个初始化的情况:
全部初始化:
int a[2][3] = {2, 5, 4, 2, 3, 4};
这就像是你有一个两层的公寓楼,每层有三个房间,你决定了每个房间的房客。这里不是按层来初始化,而是一个房间接一个房间地分配房客。
部分初始化:
int a[2][3] = {3, 5, 6, 8};
这种情况下,你只决定了前四个房间的房客。所以,第一层的三个房间和第二层的第一个房间有房客,剩下的房间自动空出来。
5.数组元素的引用方法
一维数组元素的引用方法
一维数组就像是一排房间,每个房间里有一个东西,比如数字。你可以通过下标来找到每个房间里的东西。下标就像是房间的门牌号,告诉你这个房间在数组中的位置。
例如,如果有一个一维数组 int a[5];
,那么:
-
a[0]
表示第一个房间里的东西。 -
a[1]
表示第二个房间里的东西。 - 以此类推,
a[2]
、a[3]
、a[4]
分别表示第三、第四、第五个房间里的东西。
二维数组元素的引用方法
二维数组就像是一个小公寓楼,有很多层,每层有很多房间。你可以通过行下标和列下标来找到每个房间里的东西。
例如,如果有一个二维数组 int a[4][5];
,那么:
-
a[0][0]
表示第一层的第一个房间里的东西。 -
a[0][1]
表示第一层的第二个房间里的东西。 -
a[1][0]
表示第二层的第一个房间里的东西。 - 以此类推,你可以用
a[1][1]
、a[2][2]
、a[3][4]
来找到其他房间里的东西。
字符数组
字符数组的初始化
首先,我们有一个字符数组 c1
,它包含了一些字符:
char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'};
这就像是你有一个房间,里面放了一些字母。每个字母都占一个位置。例如,c1[0]
是第一个房间,里面放了字母 ‘c’,c1[1]
是第二个房间,里面放了空格,以此类推。
字符串方式的初始化
然后,我们有一个字符数组 c2
,它用字符串方式初始化:
char c2[] = "c prog";
这就像是你有一个房间,里面放了一个字符串 “c prog”。注意,字符串的最后会自动加上一个特殊的字符 ‘\0’,表示字符串的结束。
二维字符数组
接下来,我们有一个二维字符数组 a
:
char a[][5] = {
{'B', 'A', 'S', 'I', 'C'},
{'d', 'B', 'A', 'S', 'E'}
};
这就像是你有一个小公寓楼,有两层,每层有五个房间。每个房间里放了一个字母。例如,a[0][0]
是第一层的第一个房间,里面放了字母 ‘B’,a[1][3]
是第二层的第四个房间,里面放了字母 ‘S’。
字符串方式的二维数组初始化
最后,我们有一个二维字符数组 a
,用字符串方式初始化:
char a[][6] = {"hello", "world"};
这就像是你有一个小公寓楼,有两层,每层有六个房间。第一层的第一个房间里放了字符串 “hello”,第二层的第一个房间里放了字符串 “world”。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了C语言的数组,祝愿你我的朋友在学习的路上一帆风顺,也祝愿我会成为一个优秀的嵌入式工程师。