除了已提供的结构建议...,
您的问题还与文件(模块)之间数据的可见性有关。
这是一个很好的链接,它将阐明如何在一个文件(通常是 .h)中创建和定义结构等信息,为结构成员分配值并在另一个文件(可能是 .c)中使用它们并修改值在第三个文件中。(可能也是一个.c)。
至于结构数组;在将使用它的任何 .c 模块包含的头文件中创建它。它可能看起来像:
#define NUM_EMPL 10 //number of employees
typedef struct {
char last[40];
char first[40];
float payrate;
int hours;
float gross;
float tax;
float net;
} EMPLOYEE;
extern EMPLOYEE empl[NUM_EMPL], *pEmpl; //'extern' keyword is used only in this file
然后,在将使用此结构的所有.c 模块中,在文件顶部某处(即不在函数内部),创建 .h 文件中定义的结构的新实例:
EMPLOYEE empl[NUM_EMPL], *pEmpl; //same as in .h file except without 'extern' keyword
然后,在函数中,您可以将结构的指针版本初始化为结构定义的开头,并用值填充结构成员;
void func1(void)
{
Empl = &empl[0]; // '[0]' guarantees pointer location.
//finally assign values
//(can be put into loop or similar to assign all n employess)
strcpy(pEmpl[0].last, "Smith");
strcpy(pEmpl[0].first, "John");
pEmpl[0].payrate = 100.00;
pEmpl[0].hours = 40;
//and so on...
//pass pointer to struct to another function
func2(pEmpl);
}
或者,您会收到一个指向该结构的指针作为参数:(
以下函数可以位于不同的 .c 文件中,以更好地展示数据的文件间可见性。)
void func2(EMPLOYEE *e)
{
// assign values
//(can be put into loop or similar to assign all n employess)
strcpy(e[0].last, pEmpl[0].last);
strcpy(e[0].first, pEmpl[0].first);
e[0].payrate = pEmpl[0].payrate;
e[0].hours = pEmpl[0].hours;
//and so on...
}