5数组
5.1概述
所谓数组,就是一个集合,里面存放了相同类型的数据元素
**特点1:**数组中的每个数据元素都是相同的数据类型
**特点2:**数组是由连续的内存位置组成的
5.2一维数组
5.2.1一维数组定义方式
一维数组的定义的三种方式
数据类型 数组名[ 数组长度] ;
数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
数据类型 数组名[ ] = { 值1,值2 ...};
实例:
#include <iostream>
using namespace std;
int main() {
/*
1. 数据类型 数组名[数组长度] ;
2. 数据类型 数组名[数组长度] = { 值1,值2 ... };
3. 数据类型 数组名[] = { 值1,值2 ... };
*/
//1. 数据类型 数组名[数组长度];
int arr[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
//访问数据元素
cout << arr[0] << endl;
cout << arr[1] << endl;
cout << arr[2] << endl;
cout << arr[3] << endl;
cout << arr[4] << endl;
//2. 数据类型 数组名[数组长度] = { 值1,值2 ... };
//如果在初始化数据时候,没有全部填写完,会用0来填补剩余数据
int arr2[5] = { 10,20,30,40,50 };
cout << arr2[0] << endl;
cout << arr2[1] << endl;
cout << arr2[2] << endl;
cout << arr2[3] << endl;
cout << arr2[4] << endl;
//利用循环 输出数组中的元素
for (int i = 0; i < 5; i++)
{
cout << arr2[i] << endl;
}
//3. 数据类型 数组名[] = { 值1,值2 ... };
//定义数组的时候,必须有初始长度
int arr3[] = { 90,80,70,60,50,54,30,20,10 };
for (int i = 0; i < 9; i++)
{
cout << arr3[i] << endl;
}
system("pause");
return 0;
}
总结1:数组名的命名规范与变量名命名规范一致,不要和变量重名
总结2:数组下标是从0开始索引
5.2.2一维数组定数组名
一位数组名称的用途:
- 可以统计整个数组在内存中的长度
- 可以获取数组在内存中的首地址
实例:
#include <iostream>
using namespace std;
int main() {
//数组名用途
//1、可以通过数组名统计整个数组占用内存
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整个数组占内存空间为:" << sizeof(arr) << endl;
cout << "每个元素占用内存空间为:" << sizeof(arr[0]) << endl;
cout << "数组中元素个数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
//2、可以通过数组名查看数组首地址
cout << "数组首地址为:" << (int)arr << endl;
cout << "数组中第一个元素地址为:" << (int)&arr[0] << endl;
cout << "数组中第二个元素地址为:" << (int)&arr[1] << endl;
//数组名是常量,不可以进行赋值操作
//arr = 100;
system("pause");
return 0;
}
总结:数组首地址与数组第一个元素地址元素相同
5.2.3冒泡排序
**作用:**最常用的排序算法,对数组内元素进行排序
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
- 重复以上的步骤,每次比较次数-1,知道不需要比较
实例:将数组{4,2,8,0,5,7,1,3,9}进行升序排序
#include <iostream>
using namespace std;
int main() {
//利用冒泡排序实现升序序列
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
cout << "排序前:" << endl;
for (int i = 0; i < 9; i++)
{
cout << arr[i] << " ";
}
cout << endl;
//开始冒泡排序
//总共排序轮数为 元素个数 -1
for (int i = 0; i < 9; i++)
{
//内层循环对比 次数 = 元素个数 - 当前轮数 - 1
for (int j = 0; j < 9 - i - 1; j++)
{
//如果第一个数字,比第二个数字大,交换两个数字
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//排序后结果
cout << "排序后" << endl;
for (int i = 0; i < 9; i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
5.3二维数组
5.3.1二维数组定义方式
二维数组定义的四种方式
数据类型 数组名[ 行数 ] [ 列数 ];
数据类型 数组名[ 行数 ] [ 列数 ] = {{ 数据1,数据2 },{ 数据3,数据4 }};
数据类型 数组名[ 行数 ] [ 列数 ] = {数据1,数据2,数据3,数据4};
数据类型 数组名[ ] [ 列数 ] = {数据1,数据2,数据3,数据4};
建议:以上4中定义方式,利用第二种更加直观,提高代码的可读性
实例:
#include <iostream>
using namespace std;
int main() {
//二维数组的定义方式
/*
1. 数据类型 数组名[ 行数 ] [ 列数 ];
2. 数据类型 数组名[ 行数 ] [ 列数 ] = {{ 数据1,数据2 },{ 数据3,数据4 }};
3. 数据类型 数组名[ 行数 ] [ 列数 ] = {数据1,数据2,数据3,数据4};
4. 数据类型 数组名[ ] [ 列数 ] = {数据1,数据2,数据3,数据4};
*/
//1. 数据类型 数组名[ 行数 ] [ 列数 ];
int arr[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
cout << arr[0][0] << endl;
cout << arr[0][1] << endl;
cout << arr[0][2] << endl;
cout << arr[1][0] << endl;
cout << arr[1][1] << endl;
cout << arr[1][2] << endl;
//外层循环打印行数,内层循环打印列数
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
cout << arr[i][j] << endl;
}
// 2. 数据类型 数组名[ 行数 ] [ 列数 ] = {{ 数据1,数据2 },{ 数据3,数据4 }};
int arr2[2][3] =
{
{1,2,3},
{4,5,6}
};
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr2[i][j] << " ";
}
cout << endl;
}
// 3. 数据类型 数组名[ 行数 ] [ 列数 ] = {数据1,数据2,数据3,数据4};
int arr3[2][3] = { 1,2,3,4,5,6 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr3[i][j] << " ";
}
cout << endl;
}
// 4. 数据类型 数组名[ ] [ 列数 ] = {数据1,数据2,数据3,数据4};
int arr4[][3] = { 1,2,3,4,5,6 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr4[i][j] << " ";
}
cout << endl;
}
system("pause");
return 0;
}
总结:在定义二维数组时,如果初始化了数据,可以省略行数
5.3.2二维数组数组名
- 查看二维数组所占内存空间
- 获取二维数组首地址
实例
#include <iostream>
using namespace std;
int main() {
//二维数组名称用途
//1、可以查看占用空间大小
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二维数组占空的内存空间为:" << sizeof(arr) << endl;
cout << "二维数组第一行占内存用为:" << sizeof(arr[0]) << endl;
cout << "二维数组第一个元素占用内存为:" << sizeof(arr[0][0]) << endl;
cout << "二维数组行数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "二维数组列数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
//2、可以查看二维数组的首地址
cout << "二维数组的首地址为:" << (int)arr << endl;
cout << "二维数组第一行的首地址为:" << (int)arr[0] << endl;
cout << "二维数组第二行的首地址为:" << (int)arr[1] << endl;
cout << "二维数组第一个元素的首地址为:" << (int)&arr[0][0] << endl;
cout << "二维数组第二个元素的首地址为:" << (int)&arr[0][1] << endl;
system("pause");
return 0;
}