C中的外部函数修改结构数组

时间:2014-03-09 21:28:01

标签: c arrays pointers struct

我是C的新手,所以我希望尽可能多地学习外部函数,指针和结构

我的想法:创建一个结构数组,然后编写“外部”函数(即保存在不同于我的主程序的文件中的函数),我可以用它来修改结构数组中结构中的字段。

我的努力:

extern void fillMass(Body *p, int size)

typedef struct body Body;
int main() { 
body bodies[n]   /* creates an array of structures of type body (yes this is a hw problem) */
int sizeBodies = sizeof(bodies)/sizeof(struct body);
Body *planets;
planets = &bodies[0]; 
fillMass(planets, sizeBodies);
}

当我在主要下面定义了fillMass时,这是有效的。但是我想在另一个文件中定义它,所以我尝试制作fillMass.h(我首先使用了fillMass.c但是后来发现很多例子,人们做了这样的事情,并使用include语句来包含它们的外部函数,我猜需要一个.h文件......?或者这只是一个约定?)
所以我写了一个名为fillMass.h的简单文件

void fillMass(Body* p, int size) {    /* this is line 10 of the code */
  p[0].mass=99;
  p[1].mass=350;   /*just testing, not using size parameter */
} 

但这不起作用。我收到了错误

fillMass.h:10: error: expected ‘)’ before ‘*’ token

有什么想法?这是fillMass.h的一个问题;当我开始工作时,我是否能够毫无困难地完成我的工作? 谢谢你的阅读。

3 个答案:

答案 0 :(得分:1)

在p [0] .mass = 99后添加'; '。

答案 1 :(得分:0)

在C中,您可以选择

使用typedef声明结构。

typedef struct body{
  int mass;
}Body;

然后是函数:

void fillMass(Body *p, int size)

OR 不输入结构

struct body{
  int mass;
};

然后该函数将是:

void fillMass(struct body *p, int size)

答案 2 :(得分:0)

两个文件。

body.h

struct body{
    int mass;
    //other elements
};
typedef struct body Body;

void fillMass(Body* p, int size) {    /* this is line 10 of the code */
    p[0].mass = 99;
    p[1].mass = 350;   /*just testing, not using size parameter */
}

的main.c

#include "body.h"

int main() {
    const unsigned n = 5;
    //you should determine n
    Body bodies[n];   /* creates an array of structures of type body (yes this is a hw problem) */
    int sizeBodies = sizeof(bodies) / sizeof(Body);
    body *planets;
    planets = bodies; //the same as &bodies[0]
    fillMass(planets, sizeBodies);
    return 0;
}