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

C 語言結構體指標陣列:參數型別不匹配導致編譯錯誤修正

     編輯:程式設計疑難解答

錯誤訊息:incompatible types for formal and actual parameter


void DisplayTranscriptOne(STUDENT MyScore)  // 形參:結構體值
void DisplayTranscriptAll(STUDENT *MyClass) // 形參:指標
void ModifyOne(STUDENT *MyInfo)             // 形參:指標

// main 中呼叫
DisplayTranscriptOne(sTranscript);     // 實參:陣列 → 退化為指標
DisplayTranscriptAll(*sTranscript);    // 實參:解參考 → 結構體值
ModifyOne(*sTranscript);               // 實參:解參考 → 結構體值

型別對照表

函數形參型別main 正確呼叫說明
DisplayTranscriptOneSTUDENT*DisplayTranscriptOne(sTranscript) 或 &sTranscript[0]需指標存取陣列元素
DisplayTranscriptAllSTUDENT*DisplayTranscriptAll(sTranscript, 10)陣列名即首元素指標
ModifyOneSTUDENT*ModifyOne(sTranscript)修改原陣列需指標

修正後完整代碼


#include 

typedef struct student {
    int iNum;
    char cName[16];
    float fChineseScore, fMathScore, fEnglishScore;
} STUDENT;

void InputTranscript(STUDENT MyClass[], int num) { /* ... */ }

void DisplayTranscriptOne(STUDENT *MyScore) {   // ✅ 改為指標
    int i;
    printf("請輸入需要顯示成績信息的學生的序號:");
    scanf("%d", &i);
    printf("%d %s %.2f %.2f %.2f\n",
           (MyScore + i)->iNum, (MyScore + i)->cName,
           (MyScore + i)->fChineseScore, (MyScore + i)->fMathScore,
           (MyScore + i)->fEnglishScore);
}

void DisplayTranscriptAll(STUDENT *MyClass, int num) { /* ... */ }

void ModifyOne(STUDENT *MyInfo) { /* ... */ }

int main(void) {
    STUDENT sTranscript[10];
    InputTranscript(sTranscript, 10);
    DisplayTranscriptOne(sTranscript);           // ✅ 傳陣列名
    DisplayTranscriptAll(sTranscript, 10);       // ✅ 傳陣列名
    ModifyOne(sTranscript);                      // ✅ 傳陣列名
    return 0;
}

核心規則

  • 陣列名在表達式中**自動退化為首元素指標**(STUDENT*)。
  • 函數需修改陣列內容或走訪多個元素 → **形參用指標**。
  • *sTranscript 是**第一個元素的值**(STUDENT),非指標,不可傳給指標形參。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved