流心
发布于 2024-05-07 / 0 阅读
0

数组

定义数组

  • <类型>变量名称[元素数量];

  • int grades[100];

  • double weight[20];

  • 元素数量必须是整数

  • C99之前:元素数量必须是编译时刻确定的字面量

  • 是一种容器(放东西的东西),特点是:

    • 其中所有的元素具有相同的数据类型;一旦创建,不能改变大小

  • *(数组中的元素在内存中是连续依次排列的)

int a[]

  • 一个 int 的数组

  • 10个单元:a[0],a[1],...,a[9]

  • 每个单元就是一个 int 类型的变量

  • 可以出现在复制的左边或右边

    • a[2] = a[1] + 6;

  • * 在赋值左边的叫做左值

数组的单元

  • 数组的每个单元就是数组类型的一个变量

  • 使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数

有效的下标范围

  • 编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写

  • 一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃

    • segmentation fault

  • 但是也可能运气好,没造成严重的后果

  • 所以这是程序员的责任来保证程序只使用有效的下标值:[0,数组的大小-1]

集成初始化的定位

  • 用[]在初始化数据中给出定位

  • 没有定位的数据接在前面的位置后面

  • 其他位置的值补零

  • 也可以不给出数组大小,让编译器算

  • 特别适合初始数据稀疏的数组

数组的大小

  • sizeof给出整个数组所占据的内容的大小,单位是字节

sizeof(a)/sizeof(a[0])

  • sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数

  • 这样的代码,一旦修改数组中初始的数据,不需要修改遍历的代码

数组的赋值

  • 数组变量本身不能被赋值

  • 要把一个数组的所有元素交给另外一个数组,必须采用遍历

遍历数组

  • 使用 for 循环,让循环变量 i 从 0 到 < 数组的长度,这样循环体内最大的 i 正好是数组最大的有效下标

  • 常见的错误是:

    • 循环结束条件是 <= 数组长度

    • 离开循环后,继续使用 i 的值来做数组元素的下标

  • 数组作为函数的参数时:

    • 不能再[] 中给出数组的大小

    • 不能再利用 sezeof 来计算数组的元素个数