【发布时间】:2011-06-04 12:35:12
【问题描述】:
当以下程序没有崩溃时,我感到很惊讶。
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宏。