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

C 語言函數參數結構體值傳遞與指針實參的隱式轉換

     編輯:程式設計綜合問答

代碼片段

void addrecord(student stud[]); // 形參:陣列(退化為指針)
student *pointer = malloc(...);
addrecord(pointer); // 實參:指針

解析

C 語言中 **陣列作為函數參數自動退化為指向首元素的指針**。因此 `student stud[]` 等價於 `student *stud`。實參 `pointer` 類型為 `student*`,完全匹配,**無隱式轉換發生**。

隱式轉換規則補充

  • **算術轉換**:`int` → `long`、`float` → `double` 等安全擴展。
  • **指針轉換**:`T*` ↔ `void*` 雙向隱式;其他指針類型需強制轉換。
  • **陣列退化** 只發生於**最外層**維度,`int (*)[N]` 不退化。

建議

函數聲明寫 `void addrecord(student *stud)` 更誠實反映本質;若需傳遞長度,額外加 `size_t n` 參數。

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