一维数组
一维数组定义的三种方式:
-
数据类型 数组名【数组长度] 】
-
数据类型 数组名【数据长度】 = {值1,值2,值3,....}
-
数据类型 数组名 【】 = {值1,值2,值3,.........}
数组的使用
数组名其实是一个指向数组第一元素的指针,可以使用数组名+数字的方式访问数组元素地址和其值
int arr[5] = {1,2,3,4,5}; cout << "arr[1] = " << *(arr+1) << endl; cout << "arr[1]地址:" <<arr+1 << endl;
运行结果:
arr[1] = 2
arr[1]地址:0x505294
数组遍历:数组长度无法直接获取,但是可以使用sizeof操作符计算其字节数然后除以数组数据类型长度来获取。
int arr[5] = {1,2,3,4,5}; int arrl = sizeof(arr)/sizeof(arr[0]); for(int i = 0;i<arrl;i++) cout << arr[i] << " "; cout << endl;
运行结果
1 2 3 4 5
练习
练习1:读取数组最大值:
#include <cstdlib> #include <iostream> #include <string> #include <time.h> using namespace std; int main() { //生成随机数组 srand(time(NULL)); int arr[10]; for (int i = 0;i<10;i++) { arr[i] = random()%100; cout << arr[i] << " "; } cout <<endl; int max = 0; for(int i=0;i<10;i++) { if(arr[i]>max) { max = arr[i]; } } cout<< "数组最大值为:" << max << endl; return 0; }
练习2.:数组倒转
#include <cstdlib> #include <iostream> #include <string> #include <time.h> using namespace std; int main() { //生成随机数组 srand(time(NULL)); int arr[10]; for (int i = 0;i<10;i++) { arr[i] = random()%100; cout << arr[i] << " "; } cout <<endl; int arrl = sizeof(arr)/sizeof(arr[0]); for(int i=0;i<arrl/2;i++) { int tem = arr[i]; arr[i] = arr[arrl-i-1]; arr[arrl-i-1] = tem; } for (int i=0;i<arrl;i++) cout << arr[i] << " "; cout << endl; return 0; }
输出结果:
27 2 33 53 10 64 23 46 94 41 41 94 46 23 64 10 53 33 2 27
练习3:冒泡排序实现
#include <cstdlib> #include <iostream> #include <string> #include <time.h> using namespace std; int main() { //生成随机数组 srand(time(NULL)); int arr[10]; for (int i = 0;i<10;i++) { arr[i] = random()%100; cout << arr[i] << " "; } cout <<endl; int arrl = sizeof(arr)/sizeof(arr[0]); for(int i=0;i<arrl;i++) { for(int j=0;j<arrl-i-1;j++) { if (arr[j] > arr[j+1]) { int tem = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tem; } } } for (int i=0;i<arrl;i++) cout << arr[i] << " "; cout << endl; return 0; }
运行结果
74 9 10 61 0 55 86 19 92 62 0 9 10 19 55 61 62 74 86 92
二维数组
二维数组定义方式
-
数据类型 数组名 [行数] [列数];
-
数据类型 数组名 [行数] [列数] = {{值11,值12,值13,...}, {值21,值22,值23,...} , ....};
-
数据类型 数组名 [行数] [列数] = {值1,值2,值3, 值4,值5,...};
-
数据类型 数组名 [ ] [列数] = {值1,值2,值3, 值4,值5,...};
二维数组声明时行数不是非必须,赋值也非必须,但是数据类型、数组名、列数必须声明
二维数组的使用:
二维数组名也是一种特殊的指针,指向第一行的地址,但是其指向的是第一行所在的数组地址,使用数组名+数字N的方式访问的是第N行的第一个元素。可以将二维数组看作是数据类型为一维数组,数组长度为行数的一维数组。也就是,一维数组中的元素为一个个数组。
int arr[2][3] = {1,2,3,4,5,6}; cout << arr + 1 << endl; // 输出的是第二行首元素地址 cout << *(arr + 1) << endl; // 输出的是第二行首元素的地址 cout << *(*(arr + 1)) << endl; // 输出的是第二行首元素的值 cout << *((arr+1)+1) << endl; // 输出的是第二行第二个元素的地址 cout << *(*(arr+1)+1) << endl; // 输出的是第二行第二个元素的值 cout << *(*(arr) + 1) << endl; // 输出的是第一行第二个元素的值
输出结果:
0x7ffc18a7ef0c
0x7ffc18a7ef0c
4
0x7ffc18a7ef18
5
2
二维数组的遍历:
int arr[2][3] = {1,2,3,4,5,6}; //声明一个2行三列的数组 int rown = sizeof(arr)/sizeof(arr[0]); //计算二维数组的行数 int coln = sizeof(arr[0])/sizeof(arr[0][0]); //计算二维数组的列数 cout << "二维数组行数:" << rown << endl; cout << "二维数组列数:" << coln << endl; for(int i=0;i<2;i++) { for(int j=0;j<3;j++) { cout << arr[i][j] << " "; } cout << endl; }
输出结果:
二维数组行数:2
二维数组列数:3
1 2 3 4 5 6