![零基础入门学习C语言:带你学C带你飞](https://wfqqreader-1252317822.image.myqcloud.com/cover/676/26125676/b_26125676.jpg)
3.1 一维数组
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P91_66842.jpg?sign=1739626299-6AEVqgTEM9WgSQscuINoIzazGVfIowcF-0-6854ba0ef16137f5c23d2606cbeeb7d2)
视频讲解
3.1.1 定义一维数组
数组就是存储一批同类型数据的地方,定义一维数组的语法格式为:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P91_103757.jpg?sign=1739626299-UKVGjrg5p0vHe2XMC9lLkrnvdhYREfKK-0-c2a74ed3e0202f13d908f819e547b1dd)
在定义数组时,需要在数组名后边紧跟一对方括号,其中的数量用来指定数组中元素的个数,因为只有告诉编译器元素的个数,编译器才能申请对应大小的内存给它存放。
上面三种数组类型,都占用多少字节的内存呢?
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P91_103759.jpg?sign=1739626299-AyQi8V07c62CRJLGeJmrnY1e6bILK3bt-0-04f541d7d6724f0d35a87cdf6e522317)
在本书的编译环境中,它们都是占用24字节的内存空间。在编译器编译程序的时候,这个空间就已经创建了。
3.1.2 访问一维数组
访问一维数组中的元素,同样是使用方括号:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P91_103760.jpg?sign=1739626299-mrARE3sRM0np8dpAHbP2Vs5nz5EJaC0E-0-4d158c37b947a265b14342841eb1ee77)
注意:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P91_103762.jpg?sign=1739626299-an5XhCBfmlTc9THuJT0JkhoTL4QsdNRP-0-f8013904370549e5647e09d0374af1c7)
3.1.3 循环与数组的关系
在此之前有些读者可能会感到疑惑:为什么循环变量通常初始化为0,而不是1呢?比如实现一个执行10次的循环,通常是这么写的:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P92_103763.jpg?sign=1739626299-lIRxnhrhsTBQUipMSaxBAK6cXDwcNZ0L-0-626755b0d6e5239147482698e0f87c69)
而不是这样写(当然下面这样写也没错,这里只是讨论习惯问题):
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P92_103764.jpg?sign=1739626299-XSLi8mEDLCOyji0wlNxQRBuHEHqq0r5I-0-ab5d410f8b075e83f4e560169ae58014)
这是因为我们常常需要使用循环来访问数组:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P92_103765.jpg?sign=1739626299-uNrfKwQzynYzCKdoidPpJLyok0CxKDGx-0-b155c1cfe3ad97c0191ce536a3c45b5b)
举个例子,下面代码尝试使用数组存放班级里10位同学的数学成绩,并计算出平均值:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P92_103766.jpg?sign=1739626299-YEqDJkWq1xSARqJdkvWib5q6psLPXDSU-0-57a188901fb4dea9a4b43399466b91f6)
程序实现如下:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P92_103767.jpg?sign=1739626299-WtWiSTUPu7amYn0QJsmvq0Ynntcg3ZBn-0-18341e0b425e5d8a883526fa68920b9d)
3.1.4 数组的初始化
在定义数组的同时对其各个元素进行赋值,称为数组的初始化。数组的初始化方式有很多,下边逐一介绍。
(1)将数组中所有元素初始化为0,可以这样写:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P93_103769.jpg?sign=1739626299-LSDo7Eu0mNDM5l1VlH9uTlcz85LNlGYj-0-1c375babc09a6835ff3b5057e7e37a29)
(2)如果是赋予不同的值,那么用逗号分隔开即可:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P93_103770.jpg?sign=1739626299-R5xzOUM6GDaUupbMPLMqs4kmTq3ZA59t-0-4f58f8c14883e4c6dcadf640ea952872)
(3)还可以只给一部分元素赋值,未被赋值的元素自动初始化为0:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P93_103771.jpg?sign=1739626299-W2azh3pdzcyX1nwh3LlaKjfTl0tBs7jY-0-44a921db64ad47d2ed0f024ace54b04e)
(4)有时候还可以偷懒,可以只给出各个元素的值,而不指定数组的长度(因为编译器会根据值的个数自动判断数组的长度):
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P93_103772.jpg?sign=1739626299-K6EGhCEgKMhOMQAvshJtwf60PXmEvpYl-0-8a0e2f2bcbb016d91c2f5e73f5694fe3)
(5)C99增加了一种新特性:指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为0:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P93_103773.jpg?sign=1739626299-kE2vg9G76I6y9XTnh0Y51tjhg7MsgDx1-0-c56feb52b338e0ce25765fb4ec17f5d6)
3.1.5 可变长数组
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P93_67183.jpg?sign=1739626299-eMWx7MyS5Zu38SeaFQgSxH05pseb1h3J-0-909f336985d90a8ca94571f8fec2ccdf)
视频讲解
在C99标准出现之前,要求定义数组的时候,数组的维度必须为常量表达式或者const的常量,所以那时候如果把代码写成下面这样,就会报错:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P93_103774.jpg?sign=1739626299-Sgi2nIV0i4BjJjwqgT8eaBgqo8t1wJHt-0-7cdf161da642c30c3ef8586fff100bf0)
但是从C99标准开始,C语言正式支持可变长数组(Variable Length Array, VLA),这里的“变长”指的是数组的长度可以在程序运行时才决定,不过一旦完成定义,数组长度在其生命周期内就不能再改变了。请看下面例子:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P94_103776.jpg?sign=1739626299-72NkF8dZX4sDewWzELJGPq0sTMlatrgE-0-5f0e2ca75cd9eeb74d31cacf6d90f541)
程序实现如下:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P94_103777.jpg?sign=1739626299-KPdW0AoFcq072uLIEwd9ew2Hn1ZkQJYp-0-2eaf66826f933be77df241d092b3678a)
3.1.6 字符数组
还记得之前介绍过,C语言是没有字符串类型的,那么C语言是如何存放和表示字符串的呢?有两种方式:字符串常量;字符类型的数组。字符串常量就是用双引号括起来的字符串,它一旦定下来就没有办法改变。更灵活的方式是使用字符类型的数组来存放和处理字符串,这样,数组中的每一个元素表示一个字符(注意:最后还需要添加一个字符串的结束符'\0')。
接下来快速回顾一下,定义字符数组的方式有哪些。最简单的是先定义指定长度的字符数组,然后给每个元素单独赋值:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P94_103778.jpg?sign=1739626299-ma4xODVajGN1zutB3xPsHl5P97hz3Dm3-0-ae2f6b29e4e5746103ea1f24d676a3fb)
还可以直接在定义的时候对字符数组进行初始化,这样会方便很多:
![](https://epubservercos.yuewen.com/701183/14565324404897806/epubprivate/OEBPS/Images/Figure-P95_103780.jpg?sign=1739626299-CTN3yY8fJZeXr9pYRFEemoef2pwWTXOl-0-0a6719677e0814ba445b80fa76176c01)