10

如果需要struct从函数返回 a,通常会返回指向 the 的指针struct

如果你想返回一个结构数组,建议:

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

我为以下两个选项绘制了图表:

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);
4

4 回答 4

6

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

于 2013-08-01T11:23:27.190 回答
5

除非您有充分的理由返回指向指针的指针(例如,如果您想稍后修改指针本身),我认为指向结构的指针就足够了。无需使用双指针来欺骗。

于 2013-08-01T11:19:06.040 回答
1

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

于 2013-08-01T14:03:31.763 回答
0

对我来说,随着间接次数的增加,代码复杂度增长得更快。因此,我更喜欢您的选项#1 struct values *foo():。

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

于 2013-08-01T13:38:36.927 回答