如果您需要从函数返回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);
答案 0 :(得分:6)
我认为不使用版本1的唯一问题是,在第二个版本中识别结构(返回)的数量可能更容易,因为NULL
指针可以用作止动元素,而在第一个版本中,可能无法定义止动元件。
答案 1 :(得分:5)
除非你有充分的理由返回指针指针(例如,如果你想稍后修改指针),我认为指向结构的指针就足够了。不需要用双指针欺骗。
答案 2 :(得分:1)
作为关于C的初学者书籍的一个例子,到目前为止答案中指出的选项1(无间接)显然会更好地满足该问题。 如果问题还有更多(例如哪个是在大型框架中传递结构的最佳方法)那么我肯定会选择选项2.为什么?结构是复杂的数据单元,往往成为独立的实体,它们被分配和传递并以不同的方式处理 - 如果数据处理变得更加复杂,那么通过直接访问处理它们的所有代码都需要重写。
答案 3 :(得分:0)
对我而言,随着间接数量的增加,代码复杂性增长得更快。因此,我更喜欢您的选项#1:struct values *foo()
。
如果数据要求推向#2:struct values **foo()
,建议您创建新类型typedef struct values *ValuesSet
并返回指向该ValuesSet *foo()
的指针。