Если бы a был объявлен как указатель на вашу структуру, a-> num вернул бы значение num.
rational_number *a;
a->num = 5;
int new_a;
new_a = a->num;
У вас есть объявленный как структура, поэтому вы должны использовать a.numчтобы вернуть значение num.
rational_number a;
a.num = 5;
int new_a;
new_a = a.num;
Оба устанавливают значение new_a равным 5.
Кроме того, вы можете получить адрес a, если это структура, и использовать его какуказатель.
rational_number a;
(&a)->num = 5;
int new_a;
new_a = a.num;