int fun(int *x, int y) {
int t;
t = x; // ❌ x 是地址,t 應存值
x = y; // ❌ 修改局部指針副本,不影響實參
return y;
}
main() {
int a=3, b=8;
b = fun(&a, b); // 期望 a=8, b=3
}
int fun(int *x, int y) {
int t;
t = *x; // ✅ 取值
*x = y; // ✅ 通過指針修改實參 a
return t; // ✅ 返回原 a 的值賦給 b
}
核心:*x 解引用訪問實參 a,return t 將原 a 的值作為函數返回值賦給 b,實現交換。
int fun(char *ss, char c) {
int count = 0;
while (*ss != '\0') {
if (*ss == c) count++;
ss++;
}
return count;
}
void fun(int n) {
int sum = 0;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
sum += i;
if (i != n / i) sum += n / i; // 避免平方數重複加
}
}
printf("sum=%d\n", sum);
}
調用示例:n=856,因子 2,4,8,107,214,428 → 和 763。
/********found********/ 標記區填寫*ptr 與地址傳遞 &var 的配合'\0' 為終止條件此類題目考察指針語義理解、函數參數傳遞機制、邊界條件處理,是 C 語言基礎考試高頻考點。