跳转至

数组

数组的作用:解决大量同类数据的存储和使用问题

一、一维数组

  1. 为n个变量连续分配存储空间
  2. 所有的变量数据类型必须相同
  3. 所有变量所占的字节大小必须相等

1. 定义

1
2
3
int arr[5];
// 一维数组名不代表数组中所有的元素
// 一位数组名代表数组第一个元素的地址

2. 初始化

1. 完全初始化

1
2
3
4
5
int arr[5] = {1, 2, 3, 4, 5};
// 错误写法
// int arr[5];
// arr[5] = {1, 2, 3, 4, 5};
// 只有在定义初始的同时才可整体赋值,其他情况下整体赋值都是错误的

2.不完全初始化

1
2
int arr[5] = {1, 2, 3};
// 未初始化的元素自动为0

3. 不初始化

1
2
int arr[5];
// 所有元素都是垃圾值

4. 清零

1
int arr[5] = {0};

二、二维数组

1
2
3
4
5
int arr[3][4];
//总共12个元素,可以当3行4列来看待,这12个元素的名字一次是
//arr[0][0] arr[0][1] arr[0][2] arr[0][3]
//arr[1][0] arr[1][1] arr[1][2] arr[1][2]
//arr[2][0] arr[2][1] arr[2][2] arr[2][2]  

1. 初始化

1
2
3
4
5
6
7
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//或
int arr[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12},
}

三、多维数组

  1. 不存在多维数组
  2. 内存是线性一维的
  3. n维数组可以当做每个元素是n-1维数组的一维数组

四、数组的缺点

  1. 数组长度必须事先指定,且只能是常整数,不能是变量
  2. 传统形式定义的数组,该数组的内存须发手动释放
  3. 数组的长度一旦定义,其长度就不能更改
  4. 函数f定义的数组,在函数f运行期间可以被其他函数使用,但函数运行完毕之后,函数中的数组将无法被其他函数使用
  5. 传统方式定义的数组不能跨函数使用