struct 中的 int 指针有时为 nil,有时已定义

int pointer in struct sometimes nil, sometimes defined

我有两个以完全相同的方式定义的结构。打印出其中的 int 指针的指针值,一个为 (nil),另一个为实际指针值。

#include <stdio.h>
    
    struct struct1_ {
      int *intPtr;
    };
    
    struct struct2_ {
      int *intPtr;
    };
    
    int main(int argc, char const *argv[])
    {
      struct struct1_ struct1;
      struct struct2_ struct2;
    
      printf("struct1.intPtr %p\n", struct1.intPtr);
      printf("struct2.intPtr %p\n", struct2.intPtr);
    
      return 0;
    }

输出:

struct1.intPtr 0x7ffca33a3f10

struct2.intPtr(无)

gcc 版本 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)

这到底是怎么回事?

当局部变量未初始化时,它的值(或者对于结构,其成员的值)是不确定。所以不能保证任何特定的值都会被读取。

事实上,在很多情况下这样做会触发 undefined behavior