一、数组
1) 数组由数据类型相同的一系列元素组成
2) 声明数组告诉编译器数组中元素的数量及类型
例: float num[30]; //内含30个float类型元素的数组
char ch[10]; //内含10个char类型元素的数组
int arr[20]; //内含20和int类型元素的数组
3) 在使用数组元素之前,必须先给它们赋初值
1.数组的初始化
1) 以逗号分隔的值列表(用花括号括起来)来初始化数组,各值之间用逗号分隔(逗号和值之间可以使用空格)
举例: 打印每个月的天数
#include<stdio.h>
#define MONTHS 12
int main()
{
int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};
int index;
for(index = 0;index<MONTHS;index++)
{
printf("%2d 有 %2d 天!\n",index+1,days[index]);
}
return 0;
}
说明: 1) 使用const声明数组,程序只能从数组中检索值,不能把新值写入数组
2) 要创建只读数组,应该用const声明和初始化数组
例: const int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};
3) 当初始化列表中的值少于数组元素个数时,编译器会把剩余的元素都初始化为0
4) 如果初始化列表的项数多于数组元素个数,编译器就会报错
5) 如果初始化数组时省略方括号中的数字,编译器会根据初始化列表中的项数来确定数组的大小
6) 指定初始化器可以初始化指定的数组元素
例: int arr[6] = {[5]=22};
注: 在初始化一个元素后,未初始化的元素都会被设置为0
如果指定初始化器后面有更多的值,那么后面这些值将被用于初始化指定元素后面的元素
如果再次初始化指定的元素,那么最后的初始化将会取代之前的初始化
2.给数组元素赋值
1) 声明数组后,可以借助数组下标(或索引)给数组元素赋值
例: int arr[10];
for(int i = 0;i<10;i++)
arr[i] = i;
2) C不允许把数组作为一个单元赋给另一个数组,除初始化以外也不允许使用花括号列表的形式赋值
3.数组边界
1) 在使用数组时,要防止数组下标超出边界(确保下标是有效的值)
2) 使用越界的数组下标会导致程序改变其他变量的值
3) 在C标准中,使用越界下标的结果是未定义的
二、多维数组(数组的数组)
例: int arr[2][3]; //内含2个数组元素的数组,每个数组元素内含3个int类型的元素
初始化二维数组
例: int arr[2][3] = { {1,2,3},{4,5,6}};
1) 初始化可以省略内部的花括号,只保留最外面的一对花括号(只要保证初始化的数值个数正确)
2) 如果初始化的数值不够,则按照先后顺序进行初始化,后面没有值的默认初始化为0
例1: int arr[2][3] = { {5,6},{7,8}};
例2: int arr[2][3] = {5,6,7,8};