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 协议,转载请注明出处。