一 数组
数组,简而言之,就是一组数,它有两个特点:
1.数组中的每个数据元素都是相同的数据类型
2.数组是由一段连续的内存空间存储的
1.1 一维数组
一维数组定义的三种方式:
数据类型 数组名[ 数组长度 ];//定义好数组,可以通过数组下标赋初值
数据类型 数组名[ 数组长度 ] = { 值1,值2 ...值n};//if数组长度>n,未赋初值的元素为0
数据类型 数组名[ ] = { 值1,值2 ...};//可以推出数组长度
int main() { //定义方式1 //数据类型 数组名[元素个数]; int score[10]; //利用下标赋值 score[0] = 100; score[1] = 99; score[2] = 85; //利用下标输出 cout << score[0] << endl; cout << score[1] << endl; cout << score[2] << endl; //第二种定义方式 //数据类型 数组名[元素个数] = {值1,值2 ,值3 ...}; //如果{}内不足10个数据,剩余数据用0补全 int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 }; //逐个输出 //cout << score2[0] << endl; //cout << score2[1] << endl; //一个一个输出太麻烦,因此可以利用循环进行输出 for (int i = 0; i < 10; i++) { cout << score2[i] << endl; } //定义方式3 //数据类型 数组名[] = {值1,值2 ,值3 ...}; int score3[] = { 100,90,80,70,60,50,40,30,20,10 }; for (int i = 0; i < 10; i++) { cout << score3[i] << endl; } system("pause");//按任意键继续... return 0; }
一维数组名称的用途:
- 可以统计整个数组在内存空间的大小//sizeof(数组名)
- 可以获取数组在内存空间中的首地址//数组名
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;//转化为10进制 cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl; cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl; //arr = 100; 错误,数组名是常量,因此不可以赋值 system("pause"); return 0; }
案例:五只小猪称体重
在一个数组中记录了五只小猪的体重,如:int arr[5] = {300,350,200,400,250};
找出并打印最重的小猪体重。
#include <iostream>
using namespace std;
int main()
{
int arr[5] = { 300,350,200,400,250 };
int max = 0;
for(int i = 0; i < 5; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
cout << "最重的小猪是" << max << endl;
system("pause");
return 0;
}
案例:数组元素逆置
请声明一个5个元素的数组,并且将元素逆置.
(如原数组元素为:1,3,5,7,9;逆置后输出结果为:9,7,5,3,1);
#include<iostream>
using namespace std;
int main()
{
int arr[5] = { 1,3,5,7,9 };
cout << "旧的数组中的元素为";
for (int i = 0; i < 5; i++)
{
cout << arr[i] << " ";
}
cout << endl;//依赖循环,显示数组中所有的元素
int start = 0;//数组中第一个元素的下标
int end = (sizeof(arr) / sizeof(arr[0])) - 1;//数组中最后一个元素的下标
int temp = 0;//临时存放,防止被覆盖
while (start < end)
{
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;//下表更新
end--;//下表更新
}
cout << "新的数组中的元素为";
for (int i = 0; i < 5; i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
案例:冒泡排序
最常用的排序算法,对数组内元素进行排序,例如将数组 { 5,8,5,4,7,1,3,5,7,9 } 进行升序排序
#include<iostream>
using namespace std;
int main()
{
int arr[] = { 5,8,5,4,7,1,3,5,7,9 };
cout << "起始数组";
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << arr[i] << " ";
}
cout << endl;
int temp;
int j = 0;
while (j < sizeof(arr) / sizeof(arr[0]) - 1)
{
for (int i = 0; i < (sizeof(arr) / sizeof(arr[0]) - 1 - j); i++)//10个元素,第一次比较9次,然后8次
{
if (arr[i] >= arr[i + 1])
{
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}//第一个循环体,两两比较,大数右移
}
j++;
}
cout << "排序数组";
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
1.2 二维数组
二维数组定义的四种方式:
数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
int main() {
//方式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;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
//方式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 };
system("pause");
return 0;
}
注:方式二最具有可读性,在定义二维数组时,如果初始化了数据,给定列数,可以省略行数
二维数组数组名
- 查看二维数组所占内存空间
- 获取二维数组首地址
int main() { //二维数组数组名 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; //地址 cout << "二维数组首地址:" << arr << endl; cout << "二维数组第一行地址:" << arr[0] << endl; cout << "二维数组第二行地址:" << arr[1] << endl; cout << "二维数组第一个元素地址:" << &arr[0][0] << endl; cout << "二维数组第二个元素地址:" << &arr[0][1] << endl; system("pause"); return 0; }
参考黑马程序员C++教程