int max(int a[10], int i) { int a[10]; ... } 遮蔽參數;int max = a[0]; 與函數名 max 衝突;int a[10] 退化為 int* a,寫 int a[] 或 int* a 更誠實;max(a[10], i) 傳遞單個元素而非數組首地址,應為 max(a, 10);printf("...", max); 此處 max 既非變量也非函數返回值;printf("最大的數是:\n", max); 應為 printf("最大的數是: %d\n", max_val);。#include <stdio.h>
// 只傳遞數組首地址與長度,不傳遞循環變量
int find_max(const int* arr, size_t len) {
if (len == 0) return 0; // 或報錯
int max_val = arr[0];
for (size_t i = 1; i < len; i++)
if (arr[i] > max_val) max_val = arr[i];
return max_val;
}
int main() {
int a[10];
printf("請輸入 10 個整數:\n");
for (int i = 0; i < 10; i++) {
if (scanf("%d", &a[i]) != 1) return 1; // 輸入校驗
}
int max_val = find_max(a, 10);
printf("最大的數是: %d\n", max_val);
return 0;
}
// 回調函數指針實現泛型比較
typedef int (*cmp_func)(const void*, const void*);
void* generic_max(void* base, size_t nmemb, size_t size, cmp_func cmp) {
if (nmemb == 0) return NULL;
char* p = (char*)base;
void* max_elem = p;
for (size_t i = 1; i < nmemb; i++) {
p += size;
if (cmp(p, max_elem) > 0) max_elem = p;
}
return max_elem;
}
// int 比較器
int cmp_int(const void* a, const void* b) {
return (*(int*)a > *(int*)b) - (*(int*)a < *(int*)b);
}
這就是 qsort/bsearch 的設計思想,建議深入體會。