【发布时间】:2014-04-03 19:48:27
【问题描述】:
我遇到了这个有线代码,它没有崩溃。
#include <stdio.h>
struct s
{
char* c;
char* c2;
};
int main()
{
struct s* p = NULL;
printf("%d\n", &(p->c));
printf("%d\n", &p->c2);
printf("%d\n", &(*p).c2);
return 0;
}
输出:
0
4
4
我有几个问题无法回答:
在c/c++中NULL指针总是等于0吗?
如果 0 恰好是变量的地址会怎样?
似乎输出是结构成员的偏移地址。这是如何计算的。我的意思是 p->c 是 c 的地址,它不存在,因为 p == NULL。如果c的地址不存在,怎么能通过&p->c获取c的地址?
在 C/C++ 中取消引用 NULL 指针会保证程序崩溃吗?(假设在系统中)
【问题讨论】:
-
在 C++ 中 null 被替换为 0。
-
所有 3 个
printf()都是未定义行为 (UB)。"%d"是指针的错误匹配说明符。使用"%p"。
标签: c++ c pointers struct null