什么是我未初始化的结构值?

时间:2011-08-22 16:10:36

标签: c

所以我在全局部分有两个结构

typedef struct stack_1
 {
  short ctr;
 } stack_1;

typedef struct stack_2
 {
   struct stack_1 *s1;
 } stack_2;

然后在我做的代码中

struct stack_2 *x; 

我的x初始化为什么? 0或空。先感谢您。

4 个答案:

答案 0 :(得分:10)

如果您的声明在任何函数之外或使用static关键字(更准确地说,具有静态存储持续时间),则x的初始值为空指针(可以作为0使用或者NULL)。如果它在函数内部(更确切地说,具有自动存储持续时间),则其初始值为垃圾。

答案 1 :(得分:0)

在局部变量声明之后

struct stack_2 *x; 

x是一个未初始化的(悬空)指针。它有垃圾值,指向内存中的一些随机位置。取消引用它将是未定义的行为,即您应该不惜一切代价避免的事情。

答案 2 :(得分:0)

  • 如果声明是本地的,那么x会保留垃圾值
  • 如果声明是全局的,则x保持0

答案 3 :(得分:0)

由于你有typedef'结构名称,你应该按如下方式实例化它:

stack_2 *x;

x的值取决于上述代码的位置。如果它是全局x将被设置为0.如果它是函数x中的局部变量将是未初始化的。