C语言——数组

一,数组的概念和特点

数组是存放 两个或两个以上相邻储存单元集合 ,每个储存单元中存放相同数据类型 的数据,而这样的单元也被称为数组元素

我们将这句话进行拆分,不难发现数组的特点有:

1,数组是存放多个**数据的集合,**元素的个数不能为0

2,数组元素的存放是相邻的

3,数组中的数据的类型是相同

二,一维数组

(1)了解一维数组

a,创建

格式:

type arr_name 常量值

说明:

① type 是指要存放在数组里的数据的类型(可以是:char、int··· 也可以是自定义类型)

② arr_name 是数组的名字,数组取名根据实际需求,有意义即可

③ \[\] 中的常量值是用来指定数组大小的,根据实际的需求指定

数组的声明语句及含义,如:

int a 10; 指:定义一个长度为10的 int 数组 a

double score 50; 指:定义一个长度为50的double数组score

int b 10,x 27; 指:定义了一个长度为10的 int 数组b 和一个长度为27的 int 数组x

b,初始化

数组的初始化就是给数组赋初始值,将数据放在 **{}**里

完全初始化(初始化数据的数量 = 数组长度):

int arr 5 = {1,2,3,4,5};

不完全初始化(初始化数据的数量 < 数组长度):

int arr 5 = {1,2} //此时,第一个元素初始化为1,第二个为2,剩余的元素默认初始化为0

错误初始化(初始化数据的数量 > 数组长度):

int arr 3 = {1,2,3,4} //初始化项太多,错误

注意:int arr \[\] ={1,2,3} 等效于→ int arr 3 ={1,2,3}

数组如果初始化了,可以不规定大小,数组会根据初始化的大小来确定大小

c,数组的类型

数组里的元素有分类型,数组也是有类型的,而数组算是一种自定义类型。数组的类型就是去掉数组名后,剩下的部分(一维数组一般为:元素类型+长度),如:

int arr1 10; 数组arr1的类型是:int 10

double score 50; 数组score的类型是:double 50

(2)使用一维数组

使用过程:数组可以用来存放数据,存放后,可以通过数组的下标找到对应的数据

a,数组下标

C语言中,数组的下标是从0开始的 ,如果有n个元素,则第一个元素的下标为0,最后一个元素的下标为n-1,下面举例:

对于: int arr 5 = {1,2,3,4,5};

数组元素1 2 3 4 5

对应下标: 0 1 2 3 4

C语言中 是"下标引用操作符" ,比如:arr 5 ; 就是访问下标为5 的元素;arr 0 ;就是访问下标为0的元素(即第一个元素)

b,输入与打印

当我们需要依次给数组输入数据时我们可以利用for循环scanf函数,如:

输入:

······(前面部分省略)

int arr 10 = {0};

int i = 0;

for (i = 0;i < 10 ;i++) //注意i 不能等于10,若等于10则有0-10共11个数,会造成数组越界

{

scanf ("%d",&arr i); //通过循环i值的改变,不断把数据存入数组

}

输出同理:

······

for(i = 0;i < 10;i++)

{

printf("%d",arri);

}

c,储存

这里主要讲下数组的元素在内存中储存的特点:

我们先用一下代码来依次打印出一维数组里元素的地址:

得到:

由上述打印出的地址,我们可以得出,数组在内存储存的特点是:

1,数组随下标的增长 ,地址由小变大

2,并且每两个相邻的元素之间相差4(即一个整形的大小:4个字节)

三,二维数组

(1)了解二维数组

如果我们把一维数组当做数组的元素 ,那么此时创造的就是二维数组;把二维数组当元素,那创造的就是三维数组,依次类推,二维数组以上的统称为多维数组。

a,创建

type arr_name 常量值 常量值; //第一个 里的代表" ",第二个 里的代表""

如:

int arr 3 5; 表示:定义一个3行5列的 int 数组arr

double data 2 8; 表示:定义一个2行8列的 double 数组data

//与定义一维数组不同的是,一维数组是指定长度,二维是指定行数和列数

//定义时:行数可以省略,列数不可以省略 即:可以是int arr \[\] 5的形式

b,初始化

同样是用{}将数据括起来,初始化的规则是:先放完一行,再放下一行

不完全初始化:

int arr1 3 5 = {1,2}; //剩余元素默认初始化为0


完全初始化:

int arr3 3 5 ={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};


按行初始化:

int arr4 3 5 = {{1,2} ,{3,4} ,{5,6} } //其实就是把一行当一个元素(即一维数组)

(2)使用二维数组

a,数组下标

二维数组的行和列下标也是从0开始的,都有第0行,第0列

对于: int arr3 3 5 ={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

比如我们使用arr2 4 就代表第2行,第4列,我们就能快速的找到7

b,输入与打印

我们可以利用for的嵌套 ,先产生第一行,然后再遍历行 ,再产生第二行,再遍历,以此类推

输入:

······(省略)

int arr 3 5 ={0};

int i = 0;

for(i = 0; i < 3; i++) //产生行,嵌套内for循环 来产生列,来遍历行

{

int j = 0;

for(j = 0; j < 5 ;j++)

{

scanf("%d",&arrij); //输入数据

}

}

c,储存

用同样的打印方法,我们来观察二维地址的特点:

不难发现,和一维数组所得出的结论应该一致:

1,数组随下标的增长 ,地址由小变大

2,并且每两个相邻的元素之间相差4(即一个整形的大小:4个字节)

四,C99中的变长数组

一般来说,数组的大小指定只能使用常量常量表达式 ,或直接初始化而省略大小

int arr110;

int arr23+5;

int arr3\[\] = {1,2,3}; //初始化完后,数组的长度就规定好是3了

但是C99给了一个变长数组,让我们能使用变量指定数组大小,如:

int n = a + b;

int arr n;

上面的arr就是变长数组,它的长度由n决定 ,编译器无法事先知道,只有当运行时,才能知道arr的长度 ,好处就是我们可以根据自己所需比较精准,方便 的给数组分配长度。(但是在vs中是不支持变长数组的


🌈我的分享就到此结束啦🌈

要是我的分享也能对你的学习起到帮助,那简直是太酷啦!

若有不足,还请大家多多指正,我们一起学习交流!

如果你也感受到博主的良苦用心,请允许博主在这里讨个三连 o(╥﹏╥)o

最后,祝愿大家都能开开心心,过好每一天!!!

相关推荐
丷丩1 分钟前
MapLibre GL JS第25课:添加栅格瓦片源
开发语言·javascript·gis·mapbox·maplibre gl js
QiLinkOS20 分钟前
【用呼吸重构创造价值关系——QiLink生态】
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
水无痕simon22 分钟前
8 判断,分支,循环语句
c语言
朔北之忘 Clancy29 分钟前
2026 年 3 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·考级
万法若空41 分钟前
Libevent C语言开发完全教程:从入门到实战
c语言·网络
Upsy-Daisy1 小时前
IOTA 学习笔记(四):当前 IOTA 架构总览
笔记·学习·架构
山楂树の1 小时前
JS中??和||的区别
笔记
Old Uncle Tom1 小时前
Harness Engineering 综述
java·开发语言·数据库
U盘失踪了1 小时前
Browser Use — AI驱动浏览器自动化的全新范式
笔记·自动化
星原望野1 小时前
JAVA:策略模式的实战使用
java·开发语言·策略模式