数组: 什么是数组:相同类型的变量的组合,是一种批量定义变量的方式 定义: 类型 数组名[数量]; int arr[5]; == int num1,num2,num3,num4,num5;
使用:数组名[下标]; 下标:从0开始,范围:0 ~ 数量-1 遍历:与for循环配合使用,使用循环变量 i 当做数组的下标 初始化:类型 数组名[数量] = {1,2,3,4,5...}; 1、数组与普通变量是一样默认值是随机,为安全也要对数组进行初始化 2、这种初始化语法只能在定义数组时使用,而且不能整体赋值 3、如果初始化数据过多,编译器会丢弃,并产生警告 4、如果初始化数据不足,编译器则补0 5、初始化数组时长度可以省略,编译器会自动统计数据的个数,然后告诉数组 sizeof(arr)/sizeof(arr[0]) == 数组长度 练习1:定义一个长度为10的数组并初始化,计算出最大值,最小值,以及平均值。 练习2:定义一个长度为10的数组并初始化,进行升序排序 a b c d e 0 1 2 3 4 数组越界: 为了程序的运行效率,不会检查数组的下标 数组越界的后果: 1、一切正常 2、段错误 3、脏数据 练习3:定义一个长度为10的数组并初始化,找出数组中第二大的值。二维数组: 一维数组相当于把变量排成一排,通过编号访问。 二维数组相当于把变量排成矩阵,通过行号和列号来访问。
定义:类型 数组名[行数][列数]; int arr[3][5]; [0,0][0,1][0,2][0,3][0,4] [1,0][1,1][1,2][1,3][1,4] [2,0][2,1][2,2][2,3][2,4] 使用:数组名[行下标][列下标] 行下标: 0~行数-1 列下标: 0~列数-1 遍历:需要与双层for循环配合,外层循环负责遍历行,内层循环负责遍历列 for(int i = 0;i < 3;i++) { for(int j = 0;j < 5;j++) { printf("%d ",arr[i][j]); } printf("\n"); } 初始化:类型 数组名[行数][列数] = {{第一行},{第二行},{第三行}}; 练习4:定义一个5*5二维数组,找出数组中的最大值的坐标,然后计算出来这个位置周围的和。变长数组: 定义数组时使用变量作为数组的长度,在代码编译期间数组的长度是不确定,当执行到数组定义语句时,长度才能确定下来。 一旦数组长度确定后,不能改变。
优点:可以根据实际情况来确定数组的长度,能达到节约内存目的 缺点:不可以初始化 练习5:输入两个正整数m(1<=m<=6),n(1<=n<=6),然后输入数组arr[m][n]的各个元素的值,然后计算个元素的和,统计非零元素的个数,计算出所有元素的平均值,再计算元素的值大于平均值的元素个数。 练习6:显示N层杨辉三角 int n = 0; printf("请输入数组长度:"); scanf("%d",&n); int arr[n]; for(int i = 0;i <sizeof(arr)/sizeof(arr[0]);i++) { printf("请输入数据: "); scanf("%d",&arr[i]); } 进制转换、原码反码补码 函数 类型限定符 const static volatile 指针 字符串 堆内存管理