Хорошо, так вот моя проблема:Как заполнить структуру значениями одинаковой структуры внутри функции?
1) У меня есть структура, определенная сказать так:
struct minos_model
{
int ifanis, ifdeck, npts, icb, cmb, noc;
double tref;
double r[MODEL_NPTS_MAX], rho[MODEL_NPTS_MAX], vpv[MODEL_NPTS_MAX], vsv[MODEL_NPTS_MAX],
qk[MODEL_NPTS_MAX], qmu[MODEL_NPTS_MAX], vph[MODEL_NPTS_MAX], vsh[MODEL_NPTS_MAX], eta[MODEL_NPTS_MAX];
char model_name[MODEL_LINE_LEN];
};
typedef struct minos_model model_t;
2) Я предрек некоторые структуры этой формы:
/* Declare structures */
model_t candidate_mod, current_mod, empty_mod;
3) Затем я передаю им функцию, объявленную как что-то вроде этого:
void
perturb_model(model_t *candidate_mod, model_t *current_mod, model_t *empty_mod)
{
candidate_mod = current_mod; // *THIS LINE*
<various other functions and whatnot>
}
4) Затем я вызываю функцию следующим образом:
perturb_model(&candidate_mod, ¤t_mod, &empty_mod);
// arguments passed as pointers
Таким образом, приведенная выше упрощенная версия того, что я сделал. Я пытаюсь (по строке ЭТА ЛИНИЯ на шаге 3), чтобы установить кандидат_mod на другую структуру (current_mod), я бы использовал цикл, но один, это кажется неэлегантным, два, иногда структура, которую я тоже устанавливаю равной (current_mod) содержит меньше значений (чем кандидат_mod), и поэтому я беспокоюсь о том, что избыточные значения из исходной структуры (кандидат_mod) останутся.
Следует также упомянуть, так как возможно, что функция определена в отдельном файле c, связанным в make-файле, поэтому, возможно, существует проблема с совместным использованием глобальных ... но я думаю, что передача указателя в качестве аргумента должна решить это?
Также, по моим исследованиям, возможно, использование extern может помочь, хотя я не могу понять, как после многих попыток.
Если бы кто-то мог объяснить лучший способ сделать это, я был бы чрезвычайно благодарен !! Я знаю, как сделать это тривиально в моем основном коде, но структуры должны быть назначены таким образом внутри функции.
Cheers.
Игнорирование массивной детали и рассмотрение названия вопроса. Просто приравняйте их к 'structB = structA', пока вы не просто приравниваете указатели, и в этом случае это должно быть' * structB = * structA' –