数组要带长度
约 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 不就能算长度吗?在 main 里 sizeof(a)/sizeof(a[0]) 确实能得到元素个数;但一旦把数组传进函数,形参 a 退化成了指针,sizeof(a) 只是指针的大小(4 或 8 字节),算出来是错的。所以函数内不能靠 sizeof 求长度。
固定套路:数组和它的长度成对出现,凡是接收数组的函数,几乎都会跟着一个 int n。写 sort(a, n)、sum(a, n)、reverse(a, n) 都是这个模式。养成“传数组必带长度”的习惯,能躲开一大类越界和少算的错误。
小纸条
写一个"求数组最大值"的函数,需要几个参数?
登录 后可看答案