首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言結構體與函數傳遞陣列參數實戰範例

     編輯:關於C語言

C 語言結構體與函數傳遞陣列參數實戰範例

本例示範如何定義結構體、編寫返回結構體的函數,以及將陣列作為指標傳遞給函數的慣用做法。

程式碼結構

typedef struct {
    double radius;
    double center[3]; // x, y, z
} Sphere;

// 返回結構體的函數
Sphere makeSphere(double r, double coords[3]) {
    Sphere s;
    s.radius = r;
    // 陣列參數實為指標,直接複製指標值
    // 這裡需逐元素複製或使用 memcpy
    for (int i = 0; i < 3; i++) s.center[i] = coords[i];
    return s;
}

int main() {
    double params[3] = {1.0, 2.0, 3.0};
    Sphere ball = makeSphere(5.0, params); // 陣列退化為指標傳遞
    // ...
}

關鍵點解析

  1. 結構體返回值:C99 允許函數直接返回結構體,編譯器處理複製(小結構體高效,大結構體建議傳指標)。
  2. 陣列參數退化:double coords[3] 在函數簽名中等同於 double *coords,傳遞的是首元素位址,不會複製整個陣列。
  3. 陣列內容複製:函數內需手動逐元素複製或用 memcpy,否則修改參數會影響原陣列。
  4. 尺寸資訊丟失:函數內無法用 sizeof(coords) 取得陣列長度,必須額外傳遞長度參數。

進階建議

  • 大型結構體建議改為 Sphere *makeSphere(..., Sphere *out) 由呼叫端分配記憶體,避免棧上大量複製。
  • 使用 static inline 針對小型結構體優化。
  • C99 可用 柔性陣列成員 或 複合字面量 簡化初始化(見另一文章)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved