数组,结构,函数

时间:2014-09-03 15:10:13

标签: c arrays function struct

我需要制作一个结构。然后创建一个包含这些结构中的7个的数组。然后将它传递给3个函数,并在函数中更改struct数组的值,并将其传递回main。 我知道如何制作一个结构。让我们一起来看看:

struct election{
   char name[20];
   int votes;
   };

我假设制作一个阵列:

struct election electionCandidates[6];

为了通过一个功能。我该怎么做?是否更容易返回struct数组,还是应该将其作为指针传递?

这可能是完全错误的,但我总觉得如果他们能够看到我实际上是在尝试解决这个问题而不仅仅是寻求帮助,我会更愿意提供帮助,因为我是懒惰的东西。

void Initialize(election *electionCandidates[]);

或许这个?

struct election Initialize(struct electionCandidates[]

感谢您提供任何有用的评论。

1 个答案:

答案 0 :(得分:0)

   void Initialize(election *electionCandidates[]);

语法错误:你必须说struct election 另一方面,你声明有一个参数类型为"指向struct election"的数组,但你需要" struct election"数组。

所以,正确的版本是:

  void Initialize(struct election electionCandidates[]);

因为在函数参数中,每个数组声明"衰减"对于指针,它将等同于:

  void Initialize(struct election *electionCandidates);

以下语法也是错误的:

  struct election Initialize(struct electionCandidates[]

正确的是:

  struct election Initialize(struct election electionCandidates[])

但是,这种形式看起来并不合乎逻辑,因为您只返回1 struct。哪个以及为什么?

electionCandidates可以修改和恢复参数main()的数组元素而没有任何问题,因此这里的void返回似乎是正确的。

也许,为类型struct election

定义别名会更好
  typedef struct election election_t;

然后我们写:

  void Initialize(election_t electrionCandidates[])

非常希望您将候选数量作为第二个参数传递,因为函数无法确定数组大小:

  void Initialize(election_t electrionCandidates[], int num)  

然后你以这种方式打电话:

  Initialize(electionCandidates, 6);  

在这里,"魔术"数字6是数组中元素的数量。