■ 概述
数组,就是一个集合,里面存放了相同类型的数据元素
■ 特点
1) 数组中的每个数据元素都是相同的数据类型
2) 数组是由连续的内存位置组成,数组里的数据放在一块连续的内存空间
■ 一维数组
□ 一维数组定义的三种方式
1) 数据类型 数组名[数组长度];
int arr[5]; arr[0] = 10; arr[1] = 20; arr[2] = 30; arr[3] = 40; arr[4] = 50;
2) 数据类型 数组名[数组长度] = {值1,值2 ...};
int arr[5] = {10,20,30,40,50};
3) 数组类型 数组名[] = {值1, 值2 ...};
int arr[] = {10,20,30,40,50}; //编译器可以通过大括号元素的个数推测数组的长度 int arr[]; //报错,定义数组的时候,必须要有初始长度
◆ 总结
1) 数组名的命名规范与变量名的命名规范一直,不要与变量重名
2) 数组下标识是从0开始索引的
□ 一维数组数组名
◆ 一维数组名的用途
1) 可以统计整个数组在内存中的长度
sizeof(arr[0]) //获取数组第一个元素所占内存大小 sizeof(arr) //获取数组所占内存大小
2) 可以获取数组在内存中的首地址
cout << arr << endl; //返回数组arr的内存地址 cout << &arr[0] << endl; //返回数组arr第一个元素的内存地址
3) 数组名是常量,不可以进行赋值操作
arr = 100; //报错
■ 二维数组
□ 二维数组定义
二维数组就是在一维数组上,多加一个维度
□ 二维数组声明
声明有以下四种方式:
1) 数据类型 数组名[行数][列数];
int arr[2][3]; arr[0][0]=1; arr[0][1]=2; arr[1][0]=3; arr[1][1]=4; arr[2][0]=5; arr[2][1]=6; for(int i = 0; i < 2 ; i ++) { for(int j = 0; j < 2 ; j ++) { cout << arr[i][j] << endl; } }
2) 数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};
更加直观,提高代码的可读性,推荐使用
int arr1[2][3] = { {1,2,3}, {4,5,6} }
3) 数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4};
int arr[2][3] = {1,2,3,4,5,6};
4) 数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4};
该种方式会通过初始数据元素和列数自动推算出行数,但是仅通过行数缺无法推断出列数,比如行数是3,则到底是每行1个元素还是每行2个元素,是无法推测的
int arr[][3] = {1,2,3,4,5,6};
注意:当进行初始化定时,可以省略行数,但不可以省略列数
□ 查看二维数组所占内存空间
int arr1[2][3] = { {1,2,3}, {4,5,6} } cout << sizeof(arr1) << endl; //输出:24 cout << sizeof(arr1[0]) << endl; //输出:12,二维数组第一行占用内存 cout << sizeof(arr1[0][0]) << endl; //输出:4,二维数组第一元素占用内存 cout << sizeof(arr1)/sizeof(arr1[0]) << endl; //输出:2,二维数组的行数 cout << sizeof(arr1[0])/sizeof(arr1[0][0]) << endl; //输出:3,二维数组的列数 double arr2[2][3] = { {1,2,3}, {4,5,6} } cout << sizeof(arr2) << endl; //输出:48
□ 获取二维数组首地址
cout << arr1 << endl; //返回二维数组的首地址 cout << arr[0] << endl; //返回二维数组第一行首地址,与二维数组的首地址相同 cout << arr[1] << endl; //返回二维数组第二行首地址,与二维数组的首地址相同 cout << &arr[0][0] << endl; //返回二维数组第1元素的首地址,与二维数组的首地址相同,查看具体元素的地址需要使用取址符 cout << &arr[0][1] << endl; //返回二维数组第1元素的首地址,与二维数组的首地址相同,查看具体元素的地址需要使用取址符