概述
所谓数组,就是一个集合,里面存放了相同类型的数据元素
**特点1:**数组中的每个==数据元素都是相同的数据类型==
**特点2:**数组是由==连续的内存==位置组成的
一维数组定义方式:
一维数组定义的三种方式:
数据类型 数组名[ 数组长度 ];
数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
数据类型 数组名[ ] = { 值1,值2 ...};
1 int main() { 2 3 //定义方式1 4 //数据类型 数组名[元素个数]; 5 int score[10]; 6 7 //利用下标赋值 8 score[0] = 100; 9 score[1] = 99; 10 score[2] = 85; 11 12 //利用下标输出 13 cout << score[0] << endl; 14 cout << score[1] << endl; 15 cout << score[2] << endl; 16 17 18 //第二种定义方式 19 //数据类型 数组名[元素个数] = {值1,值2 ,值3 ...}; 20 //如果{}内不足10个数据,剩余数据用0补全 21 int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 }; 22 23 //逐个输出 24 //cout << score2[0] << endl; 25 //cout << score2[1] << endl; 26 27 //一个一个输出太麻烦,因此可以利用循环进行输出 28 for (int i = 0; i < 10; i++) 29 { 30 cout << score2[i] << endl; 31 } 32 33 //定义方式3 34 //数据类型 数组名[] = {值1,值2 ,值3 ...}; 35 int score3[] = { 100,90,80,70,60,50,40,30,20,10 }; 36 37 for (int i = 0; i < 10; i++) 38 { 39 cout << score3[i] << endl; 40 } 41 42 system("pause"); 43 44 return 0; 45 }
总结1:数组名的命名规范与变量名命名规范一致,不要和变量重名
总结2:数组中下标是从0开始索引
一维数组名称的用途:
- 可以统计整个数组在内存中的长度
- 可以获取数组在内存中的首地址
1 #include <iostream> //(1) 2 using namespace std; 3 int main() 4 { 5 int abs3[] = { 9 ,7,1,5,3,12 }; 6 cout << sizeof(abs3) << endl;//sizeof() ; 7 //计算函数长度可以得出数组大小 8 cout << sizeof(abs3[0]) << endl;//可以得出数组数据类型 9 cout << sizeof(abs3) / sizeof(abs3[0])<< endl;//计算出数组长度 10 return 0; 11 }
1 #include <iostream> //(2) 2 using namespace std; 3 int main() 4 { 5 //2、可以通过数组名获取到数组首地址 6 int abs3[] = { 9 ,7,1,5,3,12 }; 7 cout << "数组首地址为: " << (int)abs3 << endl; 8 cout << "数组中第一个元素地址为: " << (int)&abs3[0] << endl; 9 cout << "数组中第二个元素地址为: " << (int)&abs3[1] << endl; 10 return 0; 11 }
注意:数组名是常量,不可以赋值
总结1:直接打印数组名,可以查看数组所占内存的首地址,数组首地址与第一个元素地址相同
总结2:对数组名进行sizeof,可以获取整个数组占内存空间的大小
案例 :
(1)称体重(冒泡排序)
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int a[5] = { 300,350,200,400,250}; 6 int i = 0; 7 for (i;i < sizeof(a)/sizeof(a[0])-1;i++) 8 { 9 if (a[i] > a[i+1]) 10 { 11 int b = a[i]; 12 a[i ] = a[i+1]; 13 a[i + 1] = b; 14 } 15 } 16 cout << "最重的小猪体重为 :" << a[sizeof(a) / sizeof(a[0]) - 1] << endl; 17 return 0; 18 }
#include<iostream> using namespace std; int main() { int arr[5] = { 300,350,200,400,250 }; for(int j = 0; j < 5;j++ ) { for (int i = j+1; i <= 4; i++) { if (arr[i] > arr[j]) { int temp; temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } for (int n = 0; n < 5; n++) { cout << arr[n] << endl; } return 0; }
(2)数组逆序
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int a[] = { 1,3,2,5,4 }; 6 int b = 0 ,c =(sizeof(a) / sizeof(a[0]) - 1),d; 7 while (b != c) 8 { 9 d = a[c]; 10 a[c] = a[b]; 11 a[b] = d; 12 b++; 13 c--; 14 } 15 for (int e =0; e <= (sizeof(a) / sizeof(a[0]) - 1); e++) 16 { 17 cout << a[e] << ","; 18 } 19 cout << endl; 20 return 0; 21 } 22
二维数组(此条来自黑马程序员)
二维数组定义的四种方式:
数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
建议:以上4种定义方式,利用==第二种更加直观,提高代码的可读性==
示例:
1 #include <iostream> 2 using namespace std; 3 int main() { 4 5 //方式1 6 //数组类型 数组名 [行数][列数] 7 int arr[2][3]; 8 arr[0][0] = 1; 9 arr[0][1] = 2; 10 arr[0][2] = 3; 11 arr[1][0] = 4; 12 arr[1][1] = 5; 13 arr[1][2] = 6; 14 15 for (int i = 0; i < 2; i++) 16 { 17 for (int j = 0; j < 3; j++) 18 { 19 cout << arr[i][j] << " "; 20 } 21 cout << endl; 22 } 23 24 //方式2 25 //数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } }; 26 int arr2[2][3] = 27 { 28 {1,2,3}, 29 {4,5,6} 30 }; 31 32 //方式3 33 //数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4 }; 34 int arr3[2][3] = { 1,2,3,4,5,6 }; 35 36 //方式4 37 //数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4 };会根据列数和数组元素数自动判断有几行,因为每一行元素数目要一致 38 int arr4[][3] = { 1,2,3,4,5,6 }; 39 40 system("pause"); 41 42 return 0; 43 }
二维数组数组名 (此条来自黑马程序员)
- 查看二维数组所占内存空间
- 获取二维数组首地址
1 int main() { 2 3 //二维数组数组名 4 int arr[2][3] = 5 { 6 {1,2,3}, 7 {4,5,6} 8 }; 9 10 cout << "二维数组大小: " << sizeof(arr) << endl; 11 cout << "二维数组一行大小: " << sizeof(arr[0]) << endl; 12 cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl; 13 14 cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl; 15 cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl; 16 17 //地址 18 cout << "二维数组首地址:" << arr << endl; 19 cout << "二维数组第一行地址:" << arr[0] << endl; 20 cout << "二维数组第二行地址:" << arr[1] << endl; 21 22 cout << "二维数组第一个元素地址:" << &arr[0][0] << endl; 23 cout << "二维数组第二个元素地址:" << &arr[0][1] << endl; 24 25 system("pause"); 26 27 return 0; 28 }
总结1:二维数组名就是这个数组的首地址
总结2:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小
二维数组的应用 :
1 #include <iostream> 3 using namespace std; 4 int main() 5 { 6 int a[3][3] = { {100,100,100},{90,50,100},{60,70,80} }; 7 string names[3] = { "甲", "乙" ,"丙" }; 8 for (int i = 0; i < 3; i++) 9 { 10 int b = 0; 11 for (int n = 0; n < 3; n++) 12 { 13 b += a[i][n]; 14 } 15 cout << names[i]<<"的总分为 :" << b << endl; 16 } 17 return 0; 18 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通