数组
特点:
在一段连续的内存空间中存放相同的数据类型的数据,可随机访问。
1. 定义
// 1. 数据类型 数组名[ 数组长度 ]
int array[5];
array[0] = 10;
array[1] = 20;
array[2] = 30;
array[3] = 40;
array[4] = 50;
for (int i = 0; i < 5; i++) {
cout << array[i] << endl;
}
// 2. 数据类型 数组名[数组长度] = {值1,值2,值3...}
// 若在初始化数据时,如果有数组元素没有被初始化,则会用0来填补剩余的数据
int array2[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
cout << array[i] << endl;
}
// 3. 数据类型 数组名[] = {值1,值2,值3...}
int array3[] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
cout << array3[i] << endl;
}
2. 一维数组名
一维数组名的作用:
- 可以统计整个数组在内存中的长度;
- 可以获取数组在内存中的首地址;
示例:
#include <iostream>
using namespace std;
int main () {
int arr[5] = {1, 2, 3, 4, 5};
cout << "arr数组的元素为:";
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << "\n数组所占内存为:" << sizeof(arr) << endl;
cout << "数组元素所占内存为:" << sizeof(arr[0]) << endl;
cout << "数组长度为:" << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "数组的首地址为:" << arr << endl;
cout << "数组第二个元素的地址为:" << &arr[1] << endl;
cout << "数组第三个元素的地址为:" << &arr[2] << endl;
return 0;
}
输出结果为:
arr数组的元素为:1 2 3 4 5
数组所占内存为:20
数组元素所占内存为:4
数组长度为:5
数组的首地址为:0x7ffe32931920
数组第二个元素的地址为:0x7ffe32931924
数组第三个元素的地址为:0x7ffe32931928
案例1:
需求:在一个数组中记录了五只猪的体重,找出并打印最重的猪的体重。
#include <iostream>
using namespace std;
int main () {
int arr[5];
// 输入
cout << "请输入五只猪的体重:" << endl;
for (int i = 0; i < 5; i++) {
cin >> arr[i];
}
// 找最重的猪
int max = arr[0];
for (int i = 1; i < 5; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
cout << "最重的猪有:" << max << "斤。\n" << endl;
return 0;
}
案例2:
需求:输入5个元素,并将元素逆置。
#include <iostream>
using namespace std;
int main () {
int arr[5];
cout << "请输入5个整数:" << endl;
for (int i = 0; i < 5; i++) {
cin >> arr[i];
}
for (int i =0; i < 5/2; i++) {
int tmp = arr[i];
arr[i] = arr[4-i];
arr[4-i] = tmp;
}
for(int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
3. 冒泡排序
作用:最常用的排序算法,对数组元素进行排序
#include <iostream>
using namespace std;
void output(int* arr, int size) {
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int size = 8;
int arr[8] = {4, 2, 8, 0, 5, 7, 1, 3, };
cout << "排序开始前: ";
output(arr, size);
// 每次使一个元素就位,共需n-1轮比较
for (int i = 0; i < size-1; i++) {
for (int j = 0; j < size-i-1; j++) {
if (arr[j] > arr[j+1]) {
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
cout << "第" << i+1 << "轮排序后:";
output(arr, size);
}
return 0;
}
运行结果:
排序开始前: 4 2 8 0 5 7 1 3
第1轮排序后:2 4 0 5 7 1 3 8
第2轮排序后:2 0 4 5 1 3 7 8
第3轮排序后:0 2 4 1 3 5 7 8
第4轮排序后:0 2 1 3 4 5 7 8
第5轮排序后:0 1 2 3 4 5 7 8
第6轮排序后:0 1 2 3 4 5 7 8
第7轮排序后:0 1 2 3 4 5 7 8
4. 二维数组
4.1 二维数组的定义:
// 1. 数据类型 数组名[行数][列数]
int arr1[2][3];
arr1[0][0] = 1;
arr1[0][1] = 2;
arr1[0][2] = 3;
arr1[1][0] = 4;
arr1[1][1] = 5;
arr1[1][2] = 6;
// 2. 数据类型 数组名[行数][列数] = { {数据1,数据2}, {数据3, 数据4}}
int arr2[2][3] =
{
{1, 2, 3},
{4, 5, 6}
};
// 3. 数据类型 数组名[行数][列数] = {数据1, 数据2, 数据3, 数4}
int arr3[2][3] = {1, 2, 3, 4, 5, 6};
// 可见二维数组在实质上还是一维数组,元素地址的计算方式变了。
// 4. 数据类型 数组名[ ][列数] = {数据1, 数据2, 数据3, 数4}
int arr4[][3] = {1, 2, 3, 4, 5, 6};
二维数组的遍历:
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
4.2 二维数组名
作用:
- 获取二维数组所占的内存空间大小;
- 获取二维数组首地址;
示例:
#include <iostream>
using namespace std;
void output(int arr[][3], int row, int col) {
cout << "该二维数组的内容为:" << endl;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
int main () {
int row = 2;
int col = 3;
int arr[2][3] =
{
{1, 2, 3},
{4, 5, 6},
};
output(arr, row, col);
// 1. 查看二维数组占用的内存空间
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 << endl << "二维数组的首地址为:" << arr << endl;
cout << "二维数组第一行首地址为:" << arr[0] << endl;
cout << "二维数组第二行首地址为:" << arr[1] << endl;
cout << "二维数组第一个元素首地址为:" << &arr[0][0] << endl;
cout << "二维数组第二个元素首地址为:" << &arr[0][1] << endl;
return 0;
}
运行结果为:
该二维数组的内容为:
1 2 3
4 5 6
二维数组占用的内存空间为:24
二维数组第一行占用内存为:12
二维数组第一个元素占用空间为:4
该二维数组的行数为:2
该二维数组的列数为:3
二维数组的首地址为:0x7fffa2c94480
二维数组第一行首地址为:0x7fffa2c94480
二维数组第二行首地址为:0x7fffa2c9448c
二维数组第一个元素首地址为:0x7fffa2c94480
二维数组第二个元素首地址为:0x7fffa2c94484