首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C語言指針實戰:函數參數用指針實現三數最大最小值交換

     編輯:程式設計疑難解答

題目要求

函數無返回值,三個浮點數參數,實現:
1. 求最大值、最小值。
2. 交換最大值與最小值。
3. 打印三數。

原代碼缺陷

  • 參數為 float a,b,c(值傳遞),函數內修改不影響外部。
  • 三元運算符取地址 &(a>b?...) 非法(臨時值無地址)。

正確實現:參數改為指針

#include <stdio.h>

void MaxMinChangeEachOtherNew(float *a, float *b, float *c) {
    float *max = a, *min = a;
    if (*b > *max) max = b;
    if (*c > *max) max = c;
    if (*b < *min) min = b;
    if (*c < *min) min = c;

    float tmp = *max;
    *max = *min;
    *min = tmp;
}

int main() {
    float a = 1.2f, b = 3.0f, c = 2.1f;
    printf("交換前: %.1f %.1f %.1f\n", a, b, c);
    MaxMinChangeEachOtherNew(&a, &b, &c);
    printf("交換後: %.1f %.1f %.1f\n", a, b, c);
    return 0;
}

輸出

交換前: 1.2 3.0 2.1
交換後: 3.0 1.2 2.1

核心知識點

  1. 值傳遞 vs 指針傳遞:需修改實參必須傳地址。
  2. 指針比較:比較 *p 大小,移動指針指向目標變數。
  3. 交換:通過指針解引用 *max、*min 直接操作原變數。

避坑提示

  • 不要對三元運算式結果取址 &(cond?x:y) —— 結果是右值,無地址。
  • 若參數可能為 NULL,函數開頭加判空保護。

掌握「傳指針、比解引用、換值」,C 語言函數修改多變數不再是難題!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved