2013-08-01 125 views
8

如果您需要从函数返回struct,则通常会返回一个指向struct的指针。返回结构数组或结构指针数组?

如果然后想返回结构的数组,是它建议:

  1. 回报结构的阵列(指针的第一个元素)
  2. 或返回结构指针数组?

我已经绘制以下两个选项的图:

1:

enter image description here

2:

enter image description here

鉴于下列结构定义

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

你有什么疑问? –

+0

@GrijeshChauhan什么是最好的?我选择哪一个都不重要? – Tyilo

+2

我看到不使用版本1的唯一问题是,它可能更容易识别第二个版本中的结构数量,因为'NULL'指针可以用作停止元素,而在第一个版本中它可能会无法定义此限值。 – alk

回答

6

我看到不使用版本1的唯一问题是,它可能更容易识别第二个版本中的结构数(返回),因为NULL指针可以用作停止元素,而在第一个版本可能无法定义止动元件。

5

除非你有一个很好的理由来返回一个指向指针的指针(例如,如果你想稍后修改指针),我认为指向这个结构的指针就足够了。不需要用双指针来欺骗。

0

对我而言,随着间接数量的增长,代码复杂度增长得更快。因此,我更喜欢你的选项#1:struct values *foo()

如果数据需求推向#2:struct values **foo(),建议创建一个新类型typedef struct values *ValuesSet并返回一个指针:ValuesSet *foo()

1

作为一个关于C的初学者书籍的例子,问题显然可以通过选项1(无间接)更好地满足,正如迄今为止的答案所指出的那样。 然而,如果问题还有更多的问题(例如哪个是在大型框架中传递结构的最佳方式),那么我肯定会选择2.为什么?结构是复杂的数据单元,并且倾向于成为独立的实体,这些独立的实体被分配并传递并以不同的方式进行处理 - 如果数据处理变得更加复杂,则所有通过直接访问处理它们的代码都需要重写。