代码大概是这样的吧:
- #include <stdio.h>
- int fun(int *a, int n) {
- int i, j;
- for (i = 0, j = 0; i < n; ++i)
- if (a[i] % 2 == 1)
- a[j++] = a[i];
- return j;
- }
- int main() {
- int a[] = {1, 2, 3, 4, 5, 6}, i, k;
- k = fun(a, 6);
- for (i = 0; i < k; ++i)
- printf("%3d", a[i]);
- getchar();
- }
复制代码
调用 fun
- 循环开始前,i = 0, j = 0, a : 1, 2, 3, 4, 5, 6
- 第一次循环,i = 0, j = 0, a0 % 2 == 1,也就是奇数,所以就先把 a0 设为 a0,再将 j++,此时 a : 1, 2, 3, 4, 5, 6
- 第二次循环,i = 1, j = 1, a1 % 2 == 0,也就是偶数,也就什么都不做,此时 a : 1, 2, 3, 4, 5, 6
- 第三次循环,i = 2, j = 1, a2 % 2 == 1,也就是奇数,所以就先把 a1 设为 a2,再将 j++,此时 a : 1, 3, 3, 4, 5, 6
- 第四次循环,i = 3, j = 2, a3 % 2 == 0,也就是偶数,也就什么都不做,此时 a : 1, 3, 3, 4, 5, 6
- 第五次循环,i = 4, j = 2, a4 % 2 == 1,也就是奇数,所以就先把 a2 设为 a4,再将 j++,此时 a : 1, 3, 5, 4, 5, 6
- 第六次循环,i = 6, j = 3, a5 % 2 == 0,也就是偶数,也就什么都不做,此时 a : 1, 3, 5, 4, 5, 6
- 第七次循环,i < n 不成立,所以退出
fun 返回 j,也就是 3
回到 main,k 被设为了 3,k 在这里表示长度,原本是 6,现在是 3
输出前 3 项,也就是 1 3 5,这个也就间接性的筛掉了 a 中的偶数 |