Online Compiler C

#include <stdio.h> void swap_min_max(int *a, int n) { int min = *a, max = *a; int *q = a; for(int i = 0; i < n;i++) { a++; if (*a<min) { min = *a; } if (*a<min) { max = *a; } } } int main() { return 0; }
这段代码定义了一个函数 `swap_min_max`,意图是找到数组中的最小值和最大值并交换它们。但代码中存在逻辑错误。

- 函数中 `a++` 改变了指针 `a` 的指向,导致后续访问数组元素时位置偏移,并且循环结束后指针指向了数组末尾之外。
- 第二个 `if` 条件判断与第一个相同(都是 `*a < min`),应该是判断最大值,但写成了 `*a < min`,这会导致逻辑错误。
- 函数没有实际执行交换操作,也没有记录最小值和最大值的位置。

- 注意:在循环中直接修改指针 `a` 会丢失数组的起始地址,应该使用另一个指针或索引来遍历数组。
- 检查第二个条件判断:要找到最大值,应该比较 `*a` 是否大于 `max`,而不是小于 `min`。