Som*_*ame 0 c struct pointers language-lawyer
考虑以下代码:
#include <inttypes.h>
struct test {
int a;
long b;
};
int main(void){
intptr_t ptr = (intptr_t) &(((struct test *)NULL)->b);
printf("%"PRIiPTR"\n", ptr); //prints 8
//...
}
Run Code Online (Sandbox Code Playgroud)
我已经使用这种结构很长一段时间来确定结构成员的偏移量,但现在质疑这种结构是否从标准的角度得到了明确的定义。
我不清楚的是为什么在NULL稍后获取地址的指针上执行间接寻址是合法的?
这不是有效的代码,因为它取消引用 NULL 指针并尝试获取不存在的对象的左值。
有一种语言构造可以给出结构成员的偏移量,即offsetof宏。
尽管这样的宏可能会扩展为与您所拥有的类似的表达式,但该宏被视为实现的一部分,并且此类代码可以执行“用户”代码不允许执行的操作
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |