------<a href="http://write.blog.youkuaiyun.com/postedit?ref=toolbar" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
第五讲-数组的基本概念与分类
01-数组的基本概念:
在程序中常常需要定义很多同一类型的变量,那么为例简化此操作,将这些相同类型的变量用一种特定的数据结构进行存储。将他们按照一定顺序存储在一起,用一个名字和一个序号进行表示,它就是数组。
例如:
int num1, num2, num3, num4, …;
int num[4];
很显然使用数组可以大大简化代码。
不仅如此,数组的序号特征可以实现很多非常灵活的数据结构。
2、数组的基本概念
数组:即同一数据类型的变量的集合,其中每一个数据按照指定顺序存储在一段连续的内存上。
数组元素:数组中存储的单个数据
下标:数据存储的序号
维度:数组下标的层级数。
3、数组的分类
1)按照存储数据的类型分:
数值数组
字符数字
指针数组
结构数组
2)按照维度分:
一维数组
二维数组
多维数组
04-一维数组
1、一维数组
数组中的每一个元素都不是数组,那么这个数组称为一维数组,即维度为一。
2、一维数组的定义
数组的使用与变量是一样的,需要先定义,在初始化,最后使用
语法:
类型说明符 数组名[常量表达式];
说明:
1)数据类型决定数组中每一个元素的数据类型
2)数组名好似变量名,使用数组中元素的时候需要利用数组名
3)数组明后的常量表达式表示数组元素的个数,即数组长度
3、数组定义的注意事项
1)数组长度不可以变量
2)数组长度可以使用宏定义(#define M 10)
3)数组名标识规则与变量名一样
4)数组的定义可以放在变量中(int num, array[4];)
3、一维数组的初始化
所谓初始化,就是为数组中每一个元素赋初值。数组的初始化可以分为:先定义,后初始化;定义的时候初始化
1)定义的时候初始化
类型 数组名[长度] = { 值1, 值2, … };
注意:
-将数组的每一个元素都初始化,称为完全初始化
-长度可以省略,会根据后面的数据自动判断长度
-如果数值数量多于数组长度,报错
-如果数值数量小于数组长度,则其余初始化为 0(部分初始化)
-数组元素的编号从 0 开始(int array[10] = { [3] = 3, [8] = 8 };)
2)先定义后初始化
定义好数组后,使用下标进行数组元素初始化。
4、数组初始化与未初始化
1)如果数组定义没有初始化,那么数组元素的值是随机的
2)如果部分初始化,则其余为 0
5、数组元素的使用
使用如下语法引用数组中制定下标位置的元素
数组名[下标]
该语法在使用的时候,与使用变量的规则一样
05-一维数组练习
1、从键盘输入数据,存入数组,然后遍历求和、平均值、最大值以及最小值
2、修改一下打印一个数字的二进制格式
06-一维数组的存储方式(理解)
1、数组的存储模型
存储方式
1)连续存储空间
2)大小有类型与个数决定
3)元素大小相同
4)数组名是首地址
5)每一个元素使用偏移
2、一维数组元素地址
1)数组与数组间地址不一定连续
2)数组内元素是连续的
3、计算数组的长度与指定元素地址
07-一维数组的越界问题
1、数组的越界
所谓越界的含义就是访问的数组元素超出了数组的范围。
int num1[] = {1,2,3};
int num2[] = {4,5,6};
num2[3] = 99;
08-数组元素作为函数参数
1、数组与函数的结合
数组与函数结合在一起使用有两种常见的情况
1)将数组元素作为函数参数
2)将数组名作为函数参数
2、数组元素作为函数参数
函数调用时,可以将数组元素作为参数传入。例如:
fun ( array[2] );
其使用方法和使用正常变量或常量是一样的。
求和函数,绘图复习解释传递方式
练习
1、判断一个数组中元素的值,如果值大于0,则打印该值,如果小于0,则输出0。
void fun(int a[],int n)
{
for(int i=0;i<n;i++)
if(a[i]>0)
printf("%d",a[i]);
else
{
printf("0");
}
}
2、写一个程序,初始化一个数组。要求数组长度为10,里面的值为0-9的随机数,并且每一个数字出现一次。
void fun()
{
int a[10];
for(i=0;i<10;i++)
{
for (j=0;j<=10;j++)
a[i]=arc4_random(10);
if(a[i]=a[j+1])
{
a[j+1]=arc4_random(10);
}