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

C 語言函數參數:陣列元素無法由呼叫端指定變數名

     編輯:程式設計疑難解答

直接回答

無法實現。C 語言陣列參數傳遞本質是首元素位址,編譯後元素僅存在於連續記憶體中,不保留任何名稱資訊。

為什麼做不到?

  • 陣列下標 arr[i] 編譯為 *(arr + i),純粹位移運算。
  • 呼叫端變數名 (a, b...) 在編譯後符號表中可能被優化掉,運行期不可查。
  • C 無反射機制,無法「按名稱找記憶體位置」。

替代設計模式

需求C 語言實現方式
命名參數 / 鍵值對結構體 struct { const char* key; int value; } params[]
可變參數列表stdarg.h (va_list) + 格式字串約定
物件導向屬性包不透明結構體 + Setter/Getters 函式
配置檔解析JSON/INI 解析庫 (cJSON, inih) 載入為結構體

結構體範例

typedef struct { int id; double threshold; char mode[16]; } Config;

void applyConfig(const Config* cfg) {
    if (cfg) {
        printf("ID=%d, Threshold=%.2f, Mode=%s\n", cfg->id, cfg->threshold, cfg->mode);
    }
}

int main() {
    Config c = { .id=1, .threshold=0.5, .mode="auto" }; // C99 指定初始化器
    applyConfig(&c);
    return 0;
}

結論

若需「依名稱傳值」,請改用結構體或鍵值陣列,這是 C 語言慣用且型別安全的做法。

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