Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不同的叮当声和gcc行为与指针_C++_C_Gcc_Clang - Fatal编程技术网

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为我们提供了一个真实的地址,可以在没有“分段错误”的情况下访问该地址

我有两个问题:

  • 根据C标准(和C++),正常的行为是什么
  • 为什么会发生这种情况

  • 指向检查的指针未初始化。它指向一些“随机”的位置

    访问未初始化的变量会导致错误,这意味着任何事情都可能发生

    此外,应使用
    %p
    格式说明符打印指针


    使用gcc代码,我们将在输出时得到零


    任何东西都可以是输出。它是未定义的。您不应该依赖此行为。

    这是未定义的行为

    指针在声明时不会初始化,因此它们可以指向任何地方<代码>0,
    0xDEADBEEF
    或任何其他内容都是“有效”表示

    如果要将指针初始化为null,请显式执行以下操作:

    int* pointer_to_check = nullptr;
    

    在C++中使用AN等行为是不可预测的,并且可以变化。这也是一种未定义的行为。酷家伙有唯一正确的答案。只是想补充一点,编译器将报告这种行为。尝试使用
    -Wall
    为任一编译器编译…它甚至可能是
    0xCAFEBABE
    ;)