本例示範如何定義結構體、編寫返回結構體的函數,以及將陣列作為指標傳遞給函數的慣用做法。
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); // 陣列退化為指標傳遞
// ...
}
double coords[3] 在函數簽名中等同於 double *coords,傳遞的是首元素位址,不會複製整個陣列。memcpy,否則修改參數會影響原陣列。sizeof(coords) 取得陣列長度,必須額外傳遞長度參數。Sphere *makeSphere(..., Sphere *out) 由呼叫端分配記憶體,避免棧上大量複製。static inline 針對小型結構體優化。