Редактировать : (добавлено words
, я упустил тот факт, что были две вложенные структуры, в моем стремлении объяснить различные операторы разграничения ...)
то есть оригинальный ответ был похож на some_long_var = a->wNum;
, что, конечно, неправильно ...
2-я попытка; -)
some_long_var = a->words->wNum;
// or
some_float_var = a->words->weight;
должен сделать трюк.
Так как a и b являются указателями, их необходимо сначала разыменовать, прежде чем их члены смогут получить доступ. Оператор -> делает обе вещи одновременно.
В качестве альтернативы вы можете сделать что-то вроде
some_long_var = a[0].words->wNum;
(или, возможно, со значением чем 0 в качестве нижнего индекса, если вы ожидаете, что a будет массивом). Дело в том, что в C, массивы часто «видны» как указатели на тип элемента, найденного в массиве , и поэтому оператор массива [] может быть функционально и часто семантически правильным способом разыменования указатель.
Наконец, но это более хитроумно (но полезно для углубления понимания семантики различных операторов c), вы можете сделать это в два шага, при этом оператор * выполняет разыменование, а оператор-член (.) Получает желаемый член структуры / класса:
some_long_var = (*a).words->wNum;