C++的数组
Sunday 2024/1/2 CC++
# 数组
一个存放着相同数据类型元素的集合
- 每个元素的数据类型都是一样的
- 是连续的内存位置组成的
# 1、一维数组
定义方式
数据类型 数组名[ 数组长度 ];
数据类型 数组名[ 数组长度 ] = { 值1,值2, ... };
数据类型 数据名[] = { 值1,值2, ... }
如果定义一个长度为10的数组,而只有0号元素有值,剩下的元素默认为0
# 1.1 数组名的用途
- 可以统计数组在内存中的长度 (
sizeof(数组名)
) - 可以获取数组在内存中的首地址
- 数组是常量,不能赋值
示例
#include <iostream>
using namespace std;
int main() {
int arr1[] = { 10,20,30,40,50 };
cout << "数组在内存中占用的字节是:" << sizeof(arr1) << endl; // 20
cout << "数组中一个元素在内存中占用的字节是" << sizeof(arr1[0]) << endl; // 4 也就是int类型占用4个字节
cout << "数组的长度是" << sizeof(arr1) / sizeof(arr1[0]) << endl; //5
cout << "数组的内存地址是" << arr1 << endl; //一个十六进制的数
cout << "数组的内存地址是(十进制)" << (int)arr1 << endl; // int强转后,自动转换为十进制
cout << "数组中第一个元素的内存地址是" << &arr1[0] << endl; // 和数组的内存地址相同
cout << "数组中第一个元素的内存地址是(十进制)" << (int) & arr1[0] << endl;
cout << "数组中第二个元素的内存地址是" << &arr1[1] << endl; // 和上一个元素相差四(十进制中可以直接看出来),也就是四个字节
cout << "数组中第一个元素的内存地址是(十进制)" << (int)&arr1[1] << endl;
system("pause");
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
可以用内存中的总长度除以单个元素占用的长度获得数组的长度,也就是元素的个数
直接打印数组输出的是内存地址
# 2.二维数组
数据类型 数据名[ 行数 ][ 列数 ]
;数据类型 数据名[ 行数 ][ 列数 ] ={{数据1,数据2},{数据3,数据4},{数据...}, ...}
;数据类型 数据名[ 行数 ][ 列数 ] ={数据1,数据2,数据3,数据4, ...}; // 假设是两行三列 那么他会自动把前三个归到第一列,所以不需要两层花括号
数据类型 数据名[ ][ 列数 ] ={{数据1,数据2},{数据3,数据4},{数据...}, ...}
;建议使用第二种定义
# 2.1 二维数组名的运用
示例
#include <iostream>
using namespace std;
int main1() {
int arr1[2][3] = { {10,20,30},{40,50,60} };
cout << "二维数组在内存中占用的字节是:" << sizeof(arr1) << endl;
cout << "二维数组中一个行在内存中占用的字节是" << sizeof(arr1[0]) << endl;
cout << "二维数组中一个元素在内存中占用的字节是" << sizeof(arr1[0][0]) << endl;
cout << "二维数组的行数是" << sizeof(arr1) / sizeof(arr1[0]) << endl;
cout << "二维数组的列数是" << sizeof(arr1[0]) / sizeof(arr1[0][0]) << endl;
cout << "二维数组的元素个数是" << sizeof(arr1) / sizeof(arr1[0][0]) << endl;
cout << "二维数组的内存地址是" << (int)arr1 << endl;
cout << "二维数组的第一行内存地址是" << (int)arr1[0] << endl;
cout << "二维数组的第二行内存地址是" << (int)arr1[1] << endl; // 和第一行差了12 也就是列数*数据类型所占的字节
cout << "二维数组的第一行第一列元素内存地址是" << (int)&arr1[0][0] << endl;
system("pause");
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22