C++ 不同的叮当声和gcc行为与指针
例如,我们有以下简单代码:C++ 不同的叮当声和gcc行为与指针,c++,c,gcc,clang,C++,C,Gcc,Clang,例如,我们有以下简单代码: #include "stdio.h" int main() { int* pointer_to_check; printf("%x\n", pointer_to_check); return 0; } 使用gcc,我们将在输出时得到零(对于我来说,这是正常的行为,因为指针与内存无关),但clang为我们提供了一个真实的地址,可以在没有“分段错误”的情况下访问该地址 我有两个问题: 根据C标准(和C++),正常的行为是什么 为什么会发生这种情
#include "stdio.h"
int main() {
int* pointer_to_check;
printf("%x\n", pointer_to_check);
return 0;
}
使用gcc,我们将在输出时得到零(对于我来说,这是正常的行为,因为指针与内存无关),但clang为我们提供了一个真实的地址,可以在没有“分段错误”的情况下访问该地址
我有两个问题:
指向检查的指针未初始化。它指向一些“随机”的位置 访问未初始化的变量会导致错误,这意味着任何事情都可能发生 此外,应使用
%p
格式说明符打印指针
使用gcc代码,我们将在输出时得到零
任何东西都可以是输出。它是未定义的。您不应该依赖此行为。这是未定义的行为 指针在声明时不会初始化,因此它们可以指向任何地方<代码>0,
0xDEADBEEF
或任何其他内容都是“有效”表示
如果要将指针初始化为null,请显式执行以下操作:
int* pointer_to_check = nullptr;
在C++中使用AN等行为是不可预测的,并且可以变化。这也是一种未定义的行为。酷家伙有唯一正确的答案。只是想补充一点,编译器将报告这种行为。尝试使用
-Wall
为任一编译器编译…它甚至可能是0xCAFEBABE
;)