C++的数组

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.二维数组

  • 数据类型 数据名[ 行数 ][ 列数 ];

  • 数据类型 数据名[ 行数 ][ 列数 ] ={{数据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
最后更新于: 2024/2/27 17:14:39