下标访问与遍历
int a[5] = {3, 1, 4, 1, 5}:a[0] 是 3、a[2] 是 4、a[4] 是最后的 5,合法下标 0 到 4。数组在内存里连续摆放,a[i] 一步直达,O(1)。遍历就是 for (int i = 0; i < n; i++) 挨个取 a[i],课件里求和累加出 3+1+4+1+5 = 14。长度惯用法 sizeof(a) / sizeof(a[0])(20 字节除以 4 字节得 5)只对数组本体好使。
a[n++] = x:手动追加
C 数组不会自己长大,机试的套路是:按题目上限把容量开够(如 int a[100]),配一个计数器 n 从 0 起,追加写 a[n++] = x——先把 x 放进 a[n],n 再自增,一行代码干了「放值 + 计数」两件事。边读边 a[n++] = x,读了几个 n 就是几,不用提前数数量。注意是 n 在长,格子容量始终是开好的那么多。
三个 C 特有的坑
① 越界零检查:int a[5] 访问 a[5] 是未定义行为,可能读到垃圾、写坏别的变量或崩溃(RE),而且往往不报错悄悄算错。② 局部数组是垃圾值:int a[5]; 里不是 0,要写 int a[5] = {0};(没写到的格子补 0,全局数组才自动清零)。③ 传参后 sizeof 失效:数组传进函数退化成指针,sizeof 算出指针大小 8 字节,长度 n 必须作为参数一起传。