数组要带长度

8 分钟

上一节说数组传给函数时,传的只是“首元素在哪”。这带来一个直接后果:函数并不知道这个数组有多长。所以传数组时,通常要把长度作为另一个参数一起传进去。

int arrayMax(int a[], int n) {   // 必须多带一个长度 n
    int mx = a[0];
    for (int i = 1; i < n; i++)
        if (a[i] > mx) mx = a[i];
    return mx;
}

“求数组最大值”的函数需要几个参数?两个:数组本身 a,和它的长度 n。少了 n,函数根本不知道该比到第几个。

有人会想:用 sizeof 不就能算长度吗?在 mainsizeof(a)/sizeof(a[0]) 确实能得到元素个数;但一旦把数组传进函数,形参 a 退化成了指针,sizeof(a) 只是指针的大小(4 或 8 字节),算出来是错的。所以函数内不能靠 sizeof 求长度。

固定套路:数组和它的长度成对出现,凡是接收数组的函数,几乎都会跟着一个 int n。写 sort(a, n)sum(a, n)reverse(a, n) 都是这个模式。养成“传数组必带长度”的习惯,能躲开一大类越界和少算的错误。

小纸条

写一个"求数组最大值"的函数,需要几个参数?

登录 后可看答案

数组要带长度 · 考级冲刺 · op599 课程