Я был удивлен, когда следующая программа не аварийно завершилась.
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
оценивается как действительный адрес. Не могли бы вы объяснить, в чем я ошибаюсь?