1. 数组
1.1. 初始化数组
只储存单个值的变量有时也称为标量变量(scalar variable)。
在声明变量前加上 const,设置成只读。持续只能检索数组值,而不能写入新值。
在初始化数组时,初始化的值少于元素个数时,剩余的元素也会被初始化为 0。
初始化时省略方括号内的数字,编译器会自动通过列表里的项数来确定数组的大小。
index = sizeof 数组 / sizeof 数组[0]
sizeof 得出整个数组大小(以字节为单位),sizeof 数组[0] 得出一个元素的大小,除得到数组的元素个数。
1.2. 指定初始化
#include <stdio.h>
#define MONTHS 12
int main(void)
{
int days[MONTHS] = {
31, 28, [4] = 31, 30, 31, [1] = 29};
int i;
for (i = 0; i < MONTHS; i++)
printf("%2d %dn", i+1, days[i]);
return 0;
}
![fd8a016a3afb658774811e9b814e1d7d.png](https://img-blog.csdnimg.cn/img_convert/fd8a016a3afb658774811e9b814e1d7d.png)
[4] = 31,30,31,
编译器将 4,5,6 初始化了。
同时后面的初始化会覆盖前面的初始化。
days = years; //不允许一个数组直接赋值给另一个数组
days[size] = {
5,3,2,8}; //除了初始化,其他时候都不能用花括号赋值
C 不检查下标是否正确。
int n = 5;
float a[n];
a 称为变长数组(variable-length array)。
2. 多维数组
#include <stdio.h>
#define MONTHS 12
#define YEARS 5
int main(void)
{
const float rain[YEARS][MONTHS] =
{
{
4.3,1.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,0.4,3.5,6.6},
{
8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
{
9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
{
7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
{
7.6,5.6,3.9,2.8,2.3,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
};
int year, month;
float subtot, total;
printf(" YEAR RAINFALL (inches)n");
for (year = 0, total = 0; year < YEARS; year++)
{
for (month = 0, subtot = 0; month &l