为什么下面的表达式不是(空指针)运行时错误?
typedef struct{
int a,b,c;
} st;
st obj={10,12,15};
st *ptr1=&obj;
st *ptr2=NULL;
printf("%d",*(int *)((char*)ptr1+(int)&ptr2->b));发布于 2013-06-08 21:13:40
这是完全合法的用法,因为"take address of"-operator实际上意味着:“不要加载/存储变量的值,只需给我计算出的访问它的地址。”它在实际的未定义行为被调用之前停止访问。
这是编程中的一种典型用法,以至于它实际上被封装在offsetof()宏中(它在linux中使用得相当广泛),并且已经进入编译器本身,以提供更有意义的错误消息。有关更多详细信息,请参阅http://en.wikipedia.org/wiki/Offsetof,尽管我不同意这篇关于该语句合法性的文章。
https://stackoverflow.com/questions/16999329
复制相似问题