[英]return an array of structs or an array of struct pointers?
如果需要從函數返回struct
,通常會返回指向struct
的指針。
如果您想返回一個結構數組,是否建議:
我已經為下面兩個選項繪制了一個圖表:
1:
2:
給出以下結構定義
struct values {
int a;
int b;
};
這里有一些示例代碼,用於從兩個選項訪問結構的字段:
選項1:
struct values *vals = get_values1();
printf("%d, %d\n", values[0].a, values[1].b);
選項#2:
struct values **vals = get_values2();
printf("%d, %d\n", values[0]->a, values[1]->b);
我看到不使用版本1的唯一問題是,在第二個版本中識別結構(返回)的數量可能更容易,因為NULL
指針可以用作止動元素,而在第一個版本中它可能不可能定義止動元件。
除非你有充分的理由返回指針指針(例如,如果你想稍后修改指針),我認為指向結構的指針就足夠了。 不需要用雙指針欺騙。
作為關於C的初學者書籍的一個例子,如前所述的答案所指出的,選項1(無間接)顯然可以更好地滿足該問題。 如果問題還有更多(例如哪個是在大型框架中傳遞結構的最佳方法)那么我肯定會選擇選項2.為什么? 結構是復雜的數據單元,往往成為獨立的實體,它們以不同的方式分配和傳遞 - 如果數據處理變得更加復雜,所有通過直接訪問處理它們的代碼都需要重寫。
對我來說,隨着間接數量的增加,代碼復雜性變得更快。 因此,我更喜歡你的選項#1: struct values *foo()
。
如果數據要求推向#2: struct values **foo()
,建議創建一個新類型typedef struct values *ValuesSet
並返回一個指向它的指針: ValuesSet *foo()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.