一维数组
一维数组定义的三种方式:
-
数据类型 数组名【数组长度] 】
-
数据类型 数组名【数据长度】 = {值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

4933

被折叠的 条评论
为什么被折叠?



