数组:
单个变量
保存一组数据时 数组
数组 是一组同类型的变量
1.数组的定义
数据类型 数组名[数组长度];
数据类型 是指 数组中存储元素的类型
数组名 是 标识符
数组长度 是非负整数类型
int arr[10];
//声明一个数组 数组名为arr, 数组存储元素的数据类型为int, 数组长度为10,表示最多可以存储10个int类型的数据
2.数组初始化
数组类型 数组名[数组长度] = {数据元素,…};
数组类型 数组名[] = {数据元素,…};
//通过初始化元素的个数来决定数组长度
数组初始化必须使用 {} 的形式 少了{}肯定编译通不过
允许的形式:
int arr[3] = {1,2,3};//一一赋值
int brr[3] = {1,2,3,4};//警告 但不会编译报错 多余的舍弃
int crr[3] = {1,2};// 少的部分补0
int drr[3] = {0};//全部初始化为0
int err[3] = {};//全部初始化为0
int frr[3] = {[1]=1,[0]=2};//指定位置元素初始化 其它都为0
适合于只有少数位置有值的时候初始化
int grr[] = {1,2,3,…};//由元素个数来决定数组长度
int hrr[] = {[0]=1,[2]=3};//数组长度=最大下标+1
int irr[] = {};//语法允许 但不会这样用
int arr[3] = 0;//错误
int brr[]; //错误
3.数组变量的访问 – 下标
数组定义了多个同类型的变量 变量名都是和数组名一样 怎么区分这些变量
通过下标访问数组中的元素
数组名[下标] 用来访问数组中的元素
数组的下标: 从0开始递增 最大取值 数组长度-1
下标:[0,数组长度-1]
4.数组名不是一个左值 数组名是一个右值
int arr[5] = {1,2,3};
arr = {1,2,3,4,5};//错误
int brr[5] = {1,2,3,4,5};
arr = brr;//错误
5.数组一旦定义之后 数组长度不能改变
数组长度 = sizeof(数组名)/sizeof(元素);
6.数组定义之后 只能通过下标的方式进行单一访问
7.可变长数组 定义数组时,数组长度是一个变量
可变长数组 不能用 {}的形式进行初始化
编译阶段,编译器不知道n的大小
int n = 0;
scanf("%d",&n);
int arr[n];
int i = 0;
for(;i<n;i++){
arr[i] = 0;
}
依然可以用 sizeof(arr)/sizeof(arr[0]) 来求数组长度
一维数组
二维数组
1.二维数组的定义:
数据类型 数组名[二维长度][一维长度];
二维长度 理解为 行
一维长度 理解为 列
int arr[5][7]; //总共有35个变量
2.二维数组元素的访问
下标: 二维下标 一维下标
下标都是从0开始
确定二维数组的唯一元素 需要2个下标
arr[1][3] = 3;
3.二维数组初始化
int arr[3][5]; //垃圾值
int brr[3][5] = {{1,2,3,4,5},{4,5,6,7,8},{6,7,8,9,9}};
int crr[3][5] = {{1,2,3},{4,5}};
int drr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int err[3][5] = {1,2,3};
int frr[3][5] = {[0][1]=1,[2][3]=4,[2][4]=9};
int grr[3][5] = {[0]=10,[2]={1,2,3}};
int hrr[3][5] = {0};//{{0}} {}
注意:二维数组在定义时不管以哪种方式,一维长度必须明确给定
二维长度可以不指定 二维长度缺省时必须能完={}形式初始化
int irr[][3] = {{1,2,3},{2,3}};
int jrr[][3] = {};
int krr[][3]; //错误