C++ 数组
本文最后更新于:2022年4月22日 上午
C++ 数组
数组的定义
如果 数组的元素不足长度,则会补0
方式一
声明长度,后面再赋值
int arr1[3];
arr1[0] = 1;
arr1[1] = 2;
arr1[2] = 3;
方式二
声明长度并赋值
int arr2[3] = { 1, 2, 3 };
方式三
不声明长度,根据值推导出长度
int arr3[] = { 1, 2, 3 };
数组的内存地址
通过打印数组名可以打印出该数组的首地址
int arr1[3] = { 1, 2, 3 };
cout << "arr1 地址"<< arr1 << endl;
cout << "arr1 地址转换10进制输出" << (int)arr1 << endl;
cout << "arr1 首地址" << (int)&arr1[0] << endl;
cout << "arr1 第一个元素地址" << (int)&arr1[1] << endl;
输出
arr1 地址003EF644
arr1 地址转换10进制输出4126276
arr1 首地址4126276
arr1 第一个元素地址4126280
通过打印数组相邻两个元素的地址可以发现相差4字节,因为我们定义的是
int
型的数组
&
是取地址符,因为 内存地址是一个十六进制的值,所以可以通过(int)
来转换成十进制
通过 sizeof
关键字可以查看数组所占的大小,如 sizeof(arr1)
会得到 12
,因为 一个 int
型占 4 个字节,3 个元素就是 12 个字节
cout << "arr1 所占字节" << sizeof(arr1) << endl;
输出
arr1 所占字节12
数组的遍历
C/C++
中如果需要打印数组,则需要通过 sizeof(arr1) / sizeof(arr1[0])
求出数组的长度
int arr1[3] = { 1, 2, 3 };
for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++) {
cout << arr1[i] << endl;
}
输出
1
2
3
案例一 (数组的逆置)
int arr4[] = { 1,2,3,4,5 };
int arr4len = sizeof(arr4) / sizeof(arr4[0]);
for (int i = 0; i < arr4len; i++) {
if (i < arr4len / 2) {
int temp = arr4[i];
arr4[i] = arr4[arr4len - 1 - i];
arr4[arr4len - 1 - i] = temp;
}
}
案例二 (冒泡排序)
两层循环,当 a比b大时,交换两个元素的位置
int arr5[] = { 4,3,7,9,1,2 };
int arr5len = sizeof(arr5) / sizeof(arr5[0]);
for (int i = 0; i < arr5len; i++) {
for (int j = i; j < arr5len; j++) {
if (arr5[i] > arr5[j]) {
int temp = arr5[i];
arr5[i] = arr5[j];
arr5[j] = temp;
}
}
}
二维数组
二维数组的声明
// 表示 数组的元素中是一个 2个元素的数组
int arr6[3][2] = { {10,20},{50,60},{80,90} };
二维数组的遍历
int arr6[3][2] = { {10,20},{50,60},{80,90} };
int arr6len = sizeof(arr6)/ sizeof(arr6[0]);
// 二维数组的打印时是 其第一个数组的第一个元素的地址
// 二维数组的遍历
for (int i = 0; i < arr6len; i++) {
int itemLen = sizeof(arr6[i]) / sizeof(arr6[i][0]);
for (int j = 0; j < itemLen; j++) {
cout << arr6[i][j] << ',';
}
cout << endl;
}
输出
10,20,
50,60,
80,90,
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处。