#include <iostream>
int main() {
int* pt;
std::cout << pt << std::endl;
if(pt)
std::cout << "true" << std::endl;
else
std::cout << "false" << std::endl;
return 0;
}
此代码段评估为false。更何况它会打印0英寸
std::cout << pt << std::endl;
我认为未初始化的指针指向某个随机地址,该地址可能包含垃圾值。在这种情况下,它指向0值,就像我将其分配给nullptr一样。有人可以为我澄清一下吗?
答案 0 :(得分:0)
由于指针未初始化使用,因此此代码调用未定义行为(UB)。
使用警告标志时,编译器应发出警告,例如-Wall
:
warning: 'pt' is used uninitialized in this function [-Wuninitialized]
std::cout << pt << std::endl;
^~
碰巧的是,在您的系统上运行时,它具有空指针的行为。这意味着指针占用的垃圾值恰好为0。但是请注意,kernel zeroes appear relatively often。