6.1概述
数组:就是一个集合,存放了相同类型的数据元素
特点1:数组中每个元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
6.2一维数组
6.2.1 一维数组的定义方式
数据类型 数组名 [数组长度];
可以利用循环 输入输出数组中的数据
数据类型 数组名 [数组长度] = {值1,值2 ,,,}; ``如果在初始化数据的时候,没有全部填写完,会用0来填补剩余数据
这个时候可以利用这种方法来创造(一定范围内的)数组长度未定的数组
数据类型 数组名 [ ]={值1,值2 ,,};

下标 从0开始
可以利用循环 输入输出数组中的数据
6.2.2 一维数组名称的用途
1.
(1)可以统计整个数组在内存中的长度 sizeof(数组名)
(2)可以统计数组中单个数据在内存中的长度 sizeof(数组名[下标])
(3)用数组的长度/单个数据的长度 可以得到数据的个数
2.
可以获取数组在内存中的首地址 可以直接输出数组的名称来得到首地址 `` cout<<数组名<<endl;
首地址一般是一个十六进制数
cout << ``(int)``数组名 << endl; `` 强制将地址转化为10进制
要查看数组中元素的地址cout << (int)``&``arr[下标] << endl; `` (int)可不写
数组名是一个常量 不可修改
数组首地址是数组首元素的地址
案例1
案例2
6.2.3冒泡排序
作用:最常用的排序算法,对数组内元素进行排序
1. 比较相邻的元素,如果第一个比第二个大,就交换他们两个
2.对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值
3.重复上述步骤,每次比较次数减一,直到不需要比较
排序总轮数 = 元素个数 - 1 ;
每轮对比次数 = 元素个数 - 排序轮数 - 1 ;
6.3 二维数组
在一维数组上,多加了一个维度
6.3.1 二维数组的定义方式
数据类型 数组名[行数][列数];
2.数据类型 数组名[行数][列数] = { { 数据1,数据2 } , { 数据3 ,数据4 } };
更加直观,可读性更强
3.数据类型 数组名[行数][列数] = { 数据1,数据2, 数据3,数据4 };
4.数据类型 数组名[ ][列数] = { 数据1,数据2, 数据3,数据4 };
在定义二维数组时,如果初始化了数据,可以省略行数
第一种定义方式
第二种定义方式
第三种定义方式
第四种定义方式
6.3.2 二维数组数组名
- 查看二维数组所占内存空间
cout << sizeof(数组名) << endl;
查看二维数组 **第一行** 所占内存空间<br />`cout << sizeof(数组名`**`[0]`**`) << endl;`
查看二维数组** 第一个元素** 所占内存空间<br />`cout << sizeof(数组名`**`[0][0]`**`) << endl;`<br />**<br /> 查看二维数组**行数**<br />`cout << sizeof(数组名)/sizeof(数组名[0]) <<endl;`
查看二维数组**列数**<br /> `cout << sizeof(数组名[0])/sizeof(数组名[0][0]) <<endl;`<br />**<br />2.获取**二维数组首地址**<br />`cout << 数组名 <<endl;`
还可以转成十进制cout <<
(int)
数组名 <<endl;
查看二维数组 第一行首地址cout <<
(int)
数组名
[0]
<<endl;
查看二维数组 第一个元素首地址cout << (int)
&
数组名
[0][0]
<< endl;
**
案例
数组与函数的关系
- 数组元素只能作函数的实参
- 整个数组作函数参数,数组可以作形参,形参和实参 类型要一样,二维数组的话,列要一致 实参数组就写数组名
如何创建未知元素个数的数组—动态内存分配
c语言
int arraysize;//元素个数
printf("请输入数组的大小:");
scanf("%d",&arraysize);
int *array;//用指针指向一个数组
array=(int *)malloc(arraysize *sizeof(int));//动态内存分配
....
free(array);//最后要释放这个空间,用完了,当然要还给系统
malloc()函数在内存堆区中寻找未被使用的内存,找够所需的字节数后返回该内存的起始地址。
所需字节数通过参数知道,在本例中arraysize元素个数,乘以每一个元素的字节数,等于总的字节数;
每一个元素的字节数通过测字节sizeof()运算符得到,元素的数据类型为int,所以测int类型需要多少字节。
malloc()函数并不知道用这些内存干什么,所以返回一个没有类型的指针,但对于整型指针array来说,malloc()函数得返回值必须显式转换成整型指针才能被接受。所以前面加了一个(int *)。
c++
在c++中就可以不用malloc()函数和free()函数了。int arraysize;//元素个数
cout<<"请输入数组的大小:";
cin>>arraysize;
`<br />
int *array;//用指针指向一个数组<br />
array=new int[arraysize]; //动态内存分配<br />
….<br />
delete []array;//最后要释放这个空间,是一组空间所以加了[]。`
array=new int[arraysize];
new表示申请空间;什么类型?int;多大?arraysize
返回该内存的起始地址存到array指针中