В дополнение к в Struct предложения, которые были предложены ...,
ваш вопрос также имеет отношение к видимости данных между файлами (модулей).
Здесь является great link, который уточнит, как создавать и определять информацию, такую как структура в одном файле (обычно .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...
}
Вы хотите, чтобы один массив хранил имя пользователя, фамилию, ставку оплаты, часы работы, валовую оплату и т. Д.? Это невозможно сделать в C; элементы массива все должны быть одного типа, поэтому вы не можете хранить строки, такие как имя, в том же массиве, что и double/floats, например, брутто. Вы можете создать структуру для каждого пользователя и создать массив или связанный список пользовательских структур. – verbose