数组 [一个存放了相同数据类型的集合]
数组的定义(必须有初始长度)
1.数据类型 数组名[数据长度];
2.数据类型 数组名[数据长度] = { 值1,值2 ... };
3.数据类型 数组名[] = { 值1,值2 ... };
// 第一种 定义后逐个赋值
int score[3];
score[0] = 78;
score[1] = 90;
score[2] = 100;
cout<< score[1] <<endl;
// 第二种 定义+赋值 给定大小
string arr1[3] = {"tom","jerry","my"};
cout<< arr1[1] <<endl;
// 第三种 定义+赋值 不给定大小
bool arr2[2] = {false,true};
cout<< arr2[1] <<endl;
数组名用途
1.统计整个数组占用内存大小
int arr[] = {1,2,3,4,5};
cout<< "整个数组占用的内存空间大小为:" << sizeof(arr) <<endl;
cout<< "每个元素占用的内存空间大小为:" << sizeof(arr[0]) <<endl;
cout<< "数组中的元素个数为:" << sizeof(arr) / sizeof(arr[0]) <<endl;
1.查看数组首地址
// 首地址就是第一个元素地址
// 各个元素内存地址是连续的 +4
cout<< "数组首地址为:" << (int)arr <<endl;
cout<< "第1个元素地址为:" << (int)&arr[0] <<endl;
cout<< "第2个元素地址为:" << (int)&arr[1] <<endl;
cout<< "第3个元素地址为:" << (int)&arr[2] <<endl;
cout<< "第4个元素地址为:" << (int)&arr[3] <<endl;
cout<< "第5个元素地址为:" << (int)&arr[4] <<endl;
二维数组
二维数组定义
int arr[2][3]; //两行三列的数组
* | 第1列 | 第2列 | 第3列 |
---|---|---|---|
第1行 | arr[0][0] | arr[0][1] | arr[0][2] |
第2行 | arr[1][0] | arr[1][1] | arr[1][2] |
// 输出二维数组的元素
int arr[2][3] = {
{1,2,3},
{4,5,6},
};
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 3; j++)
{
cout << arr[i][j] << " ";
}
cout<<endl;
}
// 结果 123 456
二维数组定义的4种方式
// 1.数据类型 数组名[行数][列数];
int arr1[2][3];
// 2.数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};
int arr2[2][3] = {
{1,2,3},
{4,5,6},
};
// 3.数据类型 数组名[行数][列数] = {数据1,数据2 ...};
int arr3[2][3] = {1,2,3,4,5,6}; //两行三列
// 4.数据类型 数组名[][列数] = {数据1,数据2 ...};
int arr3[][3] = {1,2,3,4,5,6}; //每3列为一行 共两行
常见坑
1.数组声明时没有初始化 数组元素的值是内存中的垃圾数据
// 一维数组
int arr1[5];
for(int i = 0; i < 5; i++)
{
std::cout << "arr1[" << i << "] = " << arr1[i] << std::endl;
}
/* 输出
arr1[0] = 0
arr1[1] = 2
arr1[2] = 7280176
arr1[3] = 33
arr1[4] = 6422384
*/
// 正确做法
int arr1[5] = {0};
// 二维数组
int arr2[2][3];
for ( int i = 0; i < 2; i++ )
{
for ( int j = 0; j < 3; j++ )
{
std::cout << "arr2[" << i << "][" << j << "] = " << arr2[i][j] << std::endl;
}
}
/* 输出
arr2[0][0] = 6422184
arr2[0][1] = 4198762
arr2[0][2] = 0
arr2[1][0] = 4200575
arr2[1][1] = 4200592
arr2[1][2] = 65535
*/
// 正确做法
int arr2[2][3] = {0};
2.二维数组越界
int arr2[][3] = {0};
for ( int i = 0; i < 3; i++ )
{
for ( int j = 0; j < 3; j++ )
{
std::cout << "arr2[" << i << "][" << j << "] = " << arr2[i][j] << std::endl;
}
}
/* 输出
arr2[0][0] = 0
arr2[0][1] = 0
arr2[0][2] = 0
arr2[1][0] = 0
arr2[1][1] = 1
arr2[1][2] = 16717360
arr2[2][0] = 1
arr2[2][1] = 6422184
arr2[2][2] = 4200225
*/
// 获取行数可知 rows = 1
size_t rows = sizeof(arr1) / sizeof(arr1[0]);
// arr2[1][2] 会导致访问未初始化的内存区域