Адресация значений вложенной структуры в C - PullRequest
1 голос
/ 15 февраля 2012

У меня есть вложенная структура следующим образом:

typedef struct {
   float mz_value;
   float int_value;
} spectrum;
typedef struct {
   // stuff
   spectrum* spectra; /* Nested struct */
   // more stuff
} chromatogram;

Я выделяю память в моем коде следующим образом:

(chrom+i)->spectra=malloc(sizeof(spectrum)*1024);

Затем я хочу присвоить ему некоторые значения, и я пробую всевозможные синтаксисы, подобные:

((chrom+i)->(spectra+j))->mz_value = (float)*(array_buffer+j);
// array_buffer is a float*

Тем не менее, это продолжает давать мне ошибку, что я не могу правильно использовать скобки, единственная проблема заключается в том, что я не могу понять, где oO. Любая помощь будет принята с благодарностью, прежде чем я пожалею о попытке использовать вложенную структуру.

Cheers, Bas

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Попробуйте

((chrom+i)->spectra+j)->mz_value = (float)*(array_buffer+j);

Или, предпочтительно, используйте обозначение массива, которое в этом случае гораздо понятнее:

chrom[i].spectra[j].mz_value = (float)array_buffer[j];
0 голосов
/ 15 февраля 2012

Ваше значение спектров не является статически распределенной структурой, это указатель и вам нужно выделить память для этого.

Если вы собираетесь работать с фиксированным количеством элементов спектра использовать статически размещенный массив

spectrum spectra[someConstantValue]; 

или выделите / освободите его динамически, в этом случае вам также нужно удерживать количество элементов.

typedef struct {
   // stuff
   spectrum* spectra; /* Nested struct */
   int count;
   // more stuff
} chromatogram;
...