数组
一次性声明多个同类型的变量
(1)声明 定义 数组
数据类型 数组名[数组长度];
声明定义一个数组,且相当于声明了 数组长度 个同类型变量
int scores[10];
scores[0] scores[1] scores[2] … scores[9] 这10个int类型变量
通过数组声明的变量同名,为了区分这些变量需要通过下标来访问这些变量
访问数组元素:
数组名[下标];
下标:
从0开始到数组长度减1
!!!注意:下标是从0开始,且最大值不能取到数组长度
数组下标不能越界
数组越界访问可能造成逻辑错误 也可以访问错误的数组
最严重的后果是程序崩溃
下标是从0开始且连续,所以很多时候都会结果循环使用
输入10个整数,逆序输出这10个整数
(2) 数组初始化
数组类型 数组名[数组长度];
数组元素全部都是随机值(垃圾值)
数据类型 数组名[数组长度] = {元素,…}; 形式进行初始化
(i) 数组长度 和 元素个数正好相等
int arr[5] = {1,2,3,4,5};
(ii) 元素个数 多于 数组长度 编译有警告
int brr[5] = {1,2,3,4,5,6,7,8}
(iii) 元素个数 小于 数组长度 后面初始化为0
int crr[5] = {1,2};
数据类型 数组名[数组长度] = {"零"};
(iv) 元素个数为0 但是有 {}
全部初始化为0 不建议使用
(v) 不指定数组长度 必须进行初始化 数组长度由初始化元素的个数决定
int err[] = {元素,...};
(o) 指定初始化 没有指定的元素初始化为0
int frr[10] = {[2]=1,[5]=2,[9]=10};
(3)数组的使用
当数组定义之后 不可以直接使用数组进行访问数组元素 或者 对数组元素进行赋值操作 只能通过下标
每一个下标对应一个元素注意
不能直接对数组名 进行 整体赋值操作 !!!!
!!!!数组名是右值
int i=0;
for(i=0;i<数组长度;i++){
数组名[i];
}
可变长数组
数据类型 数组名[变量];
int n = 0;
scanf("%d",&n);
int arr[n];
注意: 可变长数组不能直接初始化 不能 = {}这种形式初始化
必须用循环的形式进行初始化
for(i=0;i<n;i++){
arr[i] = 0;
}
一维数组
二维数组
(1)声明定义
数据类型 数组名[二维长度][一维长度];
相当于总共声明了 f二维长度*一维长度 个变量
int arr[4,7];//错误的
int arr[4][7];
(2)二维数组元素
下标确定唯一元素
需要两个维度的下标 下标的取值 都是从0开始到数组长度-1
int arr[4][7];
arr[0-3][0-6]
(3)二维数组初始化
数据类型 数组名[二维长度][一维长度]; 数组里的元素都是随机值(垃圾值)
(i)
={{1,2,3},{4,5,6},{7,8,9},...}
={{1,2,3}}
={{0}}
={0}
={1,2,3,....}
={[i][j]=x,...}
遍历数组元素
int i=0,j=0;
for(i=0;i<二维数组长度;i++){
for(j=0;j<一维数组长度;j++){
arr[i][j];
}
}
sizeof
sizeof(数组名) 求得数据所占内存大小 单位字节
sizeof(数组名)/sizeof(数组名[0]) 求得数组长度
二维数组
sizeof(数组名)/sizeof(数组名[0]) 二维数组二维的长度(行)
sizeof(数组名[0])/sizeof(数组名[0][0]) 二维数组中的一维长度(列)