[英]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.