目录
数组
一维数组
数组名
案例:冒泡排序
二维数组
数组名
数组
数组就是一个集合,里面存放了相同类型的数据元素。
下面的数字对应为数组的下标(索引),可以看到索引范围为0~数组长度-1
特点:
数组中数据元素的数据类型相同。
由连续的内存空间 位置组成。
一维数组
定义方式:
数据类型 数组名[数组长度];
数据类型 数组名[数组长度] = {值1,值2.....};
数据类型 数组[ ] = {值1,值2.....};
#include <iostream>
using namespace std;
int main()
{
// 数组
// 数组定义的三种方式:
// ①数据类型 数组名[数组长度];
int arr1[5]; // 初始化一个长度为5的int类型数组
// 元素赋值
arr1[0] = 1;
arr1[1] = 1;
arr1[2] = 1;
arr1[3] = 1;
arr1[4] = 1;
cout << "arr1[0]\t" << arr1[0] << endl; // 1 访问的时候索引范围为0-4
cout<<"---------"<<endl;
// ②数据类型 数组名[数组长度] = {值1,值2.....};
int arr2[5] = {1, 2, 3, 4, 5}; // 初始化一个长度为5的int类型数组 并对数组中元素赋值1~5 如果只初始化三个值 int arr2[5] = {1, 2, 3}; 那么后面的会补默认值,整型就是自动补零int arr2[5] = {1, 2, 3,0,0};
for (int i = 0; i < 5; i++)
{
cout << "arr2[" << i << "]\t" << arr2[i] << endl; // 循环输出arr2的数组元素
}
cout<<"---------"<<endl;
// ③数据类型 数组[ ] = {值1,值2.....};
int arr3[] = {1, 2, 3, 4, 5}; // 初始化一个长度为5的int类型数组 并对数组中元素赋值1~5 长度根据{}内数据元素个数确定
cout << "arr3[2]\t" << arr3[2] << endl; // 3
system("pause");
return 0;
}
注意点:
- int arr[5] = {1, 2, 3};初始化一个长度为5的整型数组时,元素空缺位置会补默认值.相当于int arr[5] = {1, 2, 3,0,0};
- 索引值从0开始到数组长度-1
- 数组名命名规范应与变量名加以区分,避免混淆
数组名
用途:
- 统计整个数组在内存中的长度
- 获取数组在内存中的首地址
#include <iostream>
using namespace std;
int main()
{
// 数组
// 统计整个数组在内存中的长度
int arr[5] = {1, 2, 3, 4, 5};
cout << sizeof(arr) << endl; // 输出结果为20 一个整型数组占用4个字节 所以 4*5 = 20
cout << sizeof(arr) / sizeof(arr[0]) << endl; // 5 数组长度 = 数组所有元素占用的字节总数/单个元素占用的字节总数
cout << arr << endl; // 0x62fe00 数组arr首地址
cout << (long long)arr << endl; // 6487552 将数组arr首地址由16进制强转成10进制 地址超出int范围 这里用 long long 强转
cout << &arr[0] << endl; // 0x62fe00 获取数组第一个元素的地址
cout << &arr[1] << endl; // 0x62fe04获取数组第二个元素的地址 验证是否与第一个元素相差4个字节
system("pause");
return 0;
}
数组名是常量,定义完就无法修改,不可以进行赋值操作。
案例:冒泡排序
#include <iostream>
using namespace std;
int main()
{
// 冒泡排序
int arr[5] = {7, 3, 6, 9, 2};
int n = 5; // 数组的大小
// 外层循环控制排序轮数:元素个数-1
for (int i = 0; i < n - 1; i++)
{
// 内层循环对比次数 = 元素个数-当前轮数-1
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
// 交换位置
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 输出排序结果
for (int i = 0; i < n; i++)
{
cout << arr[i] << endl;
}
system("pause");
return 0;
}
二维数组
数组元素是一维数组的数组。
定义方式:
- 数据类型 数组名[行数][列数];
- 数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}}; //常用
- 数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4};
- 数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4};
#include <iostream>
using namespace std;
int main()
{
// 二维数组
// 数据类型 数组名[行数][列数];
int arr[2][3]; // 定义二行三列整型数组
arr[0][0] = 1; // 0行0列赋值为1
arr[0][1] = 2; // 0行1列赋值为2
arr[0][2] = 3; // 0行2列赋值为3
arr[1][0] = 1; // 1行0列赋值为1
arr[1][1] = 2; // 1行1列赋值为2
arr[1][2] = 3; // 1行2列赋值为3
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr[i][j] << "\t";
}
cout << endl;
}
cout << "-----------------" << endl;
// 数据类型 数组名[行数][列数] = {{数据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] << "\t";
}
cout << endl;
}
cout << "-----------------" << endl;
// 数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4};
int arr3[2][3] = {1,2,3,3,2}; // 这样定义 自动区分每3个为1行 这里只给5个数字,测试自动补0
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr3[i][j] << "\t";
}
cout << endl;
}
cout << "-----------------" << endl;
// 数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4};
int arr4[][3] = {1,4,7,2,5,8}; // 鼠标拖动到arr4时你可以看的到他会判断出你声明的时两行三列的二维整型数组
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr4[i][j] << "\t";
}
cout << endl;
}
system("pause");
return 0;
}
数组名
用途:
- 查看二维数组所占内存空间。
- 获取二维数组首地址。
#include <iostream>
using namespace std;
int main()
{
// 数组名
// 查看二维数组所占内存空间。
int arr[2][3] =
{
{1, 2, 3},
{4, 5}};
cout << "arr size of = " << sizeof(arr) << endl; // 24 int类型四个字节 2*3*4 = 24 验证3行2列 补0也占用字节空间
cout << "arr[1] size of = " << sizeof(arr[1]) << endl; // 12 打印二维数组第二行占用内存空间 验证3行2列 补0也占用字节空间
cout << "arr[0][0] size of = " << sizeof(arr[0][0]) << endl; // 4 第一行第一列元素1占用的字节数为4
cout << "row size of = " << sizeof(arr) / sizeof(arr[0]) << endl; // 二维数组占用总字节/第一行占用字节数 = 二维数组的行数
cout << "column size of = " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl; // 第一行占用字节数/第一个元素占用字节数 = 二维数组列数
// 获取二维数组首地址。
cout << "first address " << (long long)arr << endl; // 二维数组的首地址、二维数组第一行的首地址,二维数组第一个元素的首地址(具体元素查看地址需要加取址符 &arr[0][0])都是相同的
system("pause");
return 0;
}