Основной вопрос структуры C - PullRequest
0 голосов
/ 18 мая 2011

например:

typedef struct {  
    int num;  
    int den;  
} rational_number; 

рациональный_номер a;

В чем разница между использованием a.num или a.den
и
a->num или a->den

Заранее.

Ответы [ 4 ]

5 голосов
/ 18 мая 2011

-> для доступа к членам указателя на структуру, тогда как . для доступа к членам самой структуры.a->num - это просто сокращение для (*a).num.Пример:

typedef struct {  
    int num;  
    int den;  
} rational_number;

rational_number a;
r.num = 1;
rational_number *a_ptr = &a;
a_ptr->num = 2; /* a.num is now 2 */ 
0 голосов
/ 18 мая 2011

Если бы 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;
0 голосов
/ 18 мая 2011

Разница в том, что в первом случае вы обращаетесь к структуре через переменную стека:

rational_number a;
a.num = 1;
a.den = 1;

во втором случае через указатель кучи:

rational_number* a = new rational_number();
a->num = 1;
a->den = 1;
0 голосов
/ 18 мая 2011

вы используете a.num, когда это нормальная переменная, и a-> num, когда это указатель

Например,

rational_number a;
a.num; // is correct
a->num; // is wrong

rational_number *b;

b.num;// wrong
b->num; //is correct
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...