繁体   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