一、数组
什么是数组:变量的组合,是一种批量定义相同类型变量的方式
定义: 类型名 数组名[数量];
int arr[5];
注意:数组的内存空间是连续分配的,且数组的长度一旦确定就无法改变
使用:数组名[下标];
下标:从0开始,范围:0~数量-1
可以是任意整型表达式,包括整型变量和整型常量
遍历:把数组的数据从头到尾显示或访问
一般与for循环配合,把循环变量i当作数组下标
初始化:
类型名 数组名[数量]={1,2,3,4,...};
变体:
1、初始化数据过多,编译器会警告并丢弃多余部分
2、初始化数据不足,编译器会对剩下元素执行值初始化(赋0)
初始化数据可以全部省略,只写大括号{},相当于全部成员初始化为0
类似地{0},{0,0}...都可达到类似效果
3、如果有初始化数据,则可以省略数组数量,因为编译器会自动统计数据个数,从而确定数组的数量
计算数组的总字节数:sizeof(arr);
计算数组成员的字节数:sizeof(arr[0]);
计算数组的长度:sizeod(arr)/sizeif(arr[0]);
数组与变量一样,默认值随机,所以一般要先初始化
数组不能整体初始化,只能逐个初始化,下面的写法是错误的:
int arr[20]=0
这种初始化语法只能在初始化时使用
练习1、定义一个长度为10的数组并初始化,计算最大值、最小值、平均值
练习2、定义一个长度为10的数组并初始化,降序排列
二、数组越界问题
出于程序运行效率考虑,C语言不检查数组下标是都越界
数据越界的后果:
1、一切正常
2、段错误(核心已转储)
3、脏数据
练习3:定义一个长度为10的数组并初始化,找出数组中第二大的值,不能排序
三、二维数组
一位数组相当于把变量排成一排,通过编号来访问
二维数组相当于把变量排成一个矩阵,通过行号和列号访问
二维数组在内存中依然是连续存储的
定义:
类型名 数组名[行数] [列号]
int arr[4] [5]
[0,0] [0,1] [0,2] [0,3]
[1,0] [1,1] [1,2] [1,3]
使用:数组名[行下标] [列下标];
行下标:0~行数-1
列下表:0~列数-1
遍历:一般需要与双层for循环配合,外层循环遍历行,内存循环遍历列
int arr[4][5];
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
}
}
初始化:
数组名[行数] [列号]={{第一行},{第二行},{第三行},...}
变体:
1、大括号内数据可以全部省略,编译器自动执行值初始化(赋0)
2、在大括号数据和列数没有省略情况下,行数可以省略,编译器会自动计算行数
3、不能省略二维数组的列数
4、当列表内元素不够初始化所有数组元素时,被部分初始化的行剩下的元素会被编译器执行值初始化,其余执行默认初始化
练习4:定义一个5*5的二维数组并初始化,找出最大值的坐标
练习5:定义一个5*5的二维数组并初始化,计算出最大值的周围一圈的和
四、变长数组
定义数组时,使用变量作为数组的长度,这种数组称为变长数组
特点:在代码编译期间数组的长度时不确定的,只有执行到数组的定义语句时,长度才最终确定下来,并且一旦确定也无法改变。
优点:可以根据实际情况来确定数组的长度,从而节约内存
缺点:初始化发生在编译期间,而可变数组长度的确定发生在运行期间,因此可变长数组无法初始化
练习6:输入两个正整数m,n(1<=m/n<=6),然后输入数组arr[m] [n]的各个元素的数据,然后计算各个元素之和,统计非零元素的个数、计算平均值、统计大于平均值的元素个数
作业1:显示三层杨辉三角
作业2:定义一个长度为N的数组并随意赋值,找出数组中未出现的最小正整数
标签:初始化,arr,下标,定义,记录,笔记,数组名,day05,数组 From: https://www.cnblogs.com/-xdj/p/17241349.html