提问人:Jonas 提问时间:1/5/2023 更新时间:1/5/2023 访问量:148
未定义的指针变量是否为 NULL?
Is an undefined pointer variable NULL?
问:
当我在两个不同的地方运行时,相同的代码会给我两个不同的输出。这是代码;
#include <iostream>
using namespace std;
struct test {
int val;
};
int main() {
test* a;
cout << (a == NULL) << endl;
}
我得到 1 作为输出:
或 0:
那么,未定义的指针变量是否等于 NULL?造成这种差异的原因可能是什么?
答:
2赞
Chris
1/5/2023
#1
如果不显式初始化,则只会将其初始化为 或 在文件级别(“全局”)声明时,或者使用 .NULL
nullptr
static
否则,它是未定义的。它可能是,也可能是任何其他值。你假设它会是 ,所以可能发生的最危险的事情是它巧合地出现在你运行的任何测试中,因为这不会检查你的假设。NULL
NULL
NULL
这些指针变量初始化为 。NULL
int *p;
int main() {
// ...
}
int main() {
static int *p;
// ...
}
0赞
dev-one
1/5/2023
#2
首先,它是未定义的。 但通常,如果您在 Visual Studio 或类似平台中运行它,在调试模式下,编译器可能会将其初始化为 null 终止指针,但在发布模式下,它只是“垃圾”,它将从“==”比较中返回 0。 希望这有帮助!
评论
3赞
Mark Ransom
1/5/2023
在调试模式下,它可能会初始化为一个无意义的值,该值比 null 更有可能崩溃。
1赞
user4581301
1/5/2023
上述评论的附录:魔术调试值。当你看到其中一个吸盘,加上或减去一个小的偏移量时,你的程序通常会试图告诉你一些事情。
评论
a