我有这段代码.它似乎在这里取消引用空指针,但随后按位与结果和unsigned int.我真的不明白整个部分.它打算做什么?这是指针算术的一种形式吗?
struct hi
{
long a;
int b;
long c;
};
int main()
{
struct hi ob={3,4,5};
struct hi *ptr=&ob;
int num= (unsigned int) & (((struct hi *)0)->b);
printf("%d",num);
printf("%d",*(int *)((char *)ptr + (unsigned int) & (((struct hi *)0)->b)));
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是44.但它是如何工作的?
在处理应用程序中的信号时,我可以在调试器中正确看到backtrace。但是backtrace系统调用未正确显示堆栈帧.gdb存储堆栈帧的方式和backtrace系统调用如何转储它们之间有区别吗?