Я удивился, когда следующая программа не сработала.Доступ к элементам структуры с помощью указателей
typedef struct _x {
int a;
char b;
int c;
} x;
main() {
x *ptr = 0;
char *d = &ptr->b;
}
Согласно моему пониманию оператор ->
имеет более высокий приоритет над &
оператора. Поэтому я ожидал, что программа выйдет из строя при следующем заявлении, когда мы попытаемся разыменовать NULL-указатель tr
.
char *d = &ptr->b;
Но заявление &ptr->b
не относится к действующему адресу. Может кто-нибудь объяснить, где я ошибаюсь?
Это как-то похоже на макрос 'offsetof'. – ruslik