簡體   English   中英

返回結構數組或結構指針數組?

[英]return an array of structs or an array of struct pointers?

如果需要從函數返回struct ,通常會返回指向struct的指針。

如果您想返回一個結構數組,是否建議:

  1. 返回一個結構數組(指向第一個元素的指針)
  2. 或者返回一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM