Онлайн компилятор 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>max) { max = *a; } } *a=q; } int main() { int n; int *a; scanf("%d", &n); int b[n]; a=&b; for(int i = 0;i< n; i++) { scanf("%d", &b[i]); printf("%d ", b[i]); } void swap_min_max(*a,n); for(int i = 0;i< n; i++) { printf("%d ", b[i]); } return 0; }
这段代码试图实现一个交换数组中最小值和最大值位置的函数,但存在多个问题。函数 `swap_min_max` 本应找到最小值和最大值并交换它们,但实际代码逻辑有误,且主函数中调用方式也不正确。

- 在 `swap_min_max` 函数中,你通过 `a++` 移动指针来遍历数组,但循环结束后指针已经指向数组末尾之外,此时 `*a = q` 试图将指针重置回开头,但写法错误。你应该使用一个单独的指针变量来遍历,而不是直接修改传入的指针 `a`,否则会丢失数组起始地址。
- 主函数中 `a = &b` 是错误的,因为 `b` 是数组名,本身就是一个指针,不需要取地址。应该直接写 `a = b` 或 `a = &b[0]`。另外,调用函数时 `void swap_min_max(*a,n)` 语法错误,应该直接写 `swap_min_max(a, n)`。