提供された構造体の提案に加えて...、
あなたの質問は、ファイル(モジュール)間のデータの可視性にも関係しています。これは、あるファイル(通常は.h)で構造体などの情報を作成および定義し、構造体メンバーに値を割り当てて別のファイル(おそらく.c)で使用し、値を変更する方法を明確にする
優れたリンクです。 3 番目のファイルで。(おそらく .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...
}