在C中未初始化的intiger声明变量的存储值是否有任何模式

问题描述 投票:0回答:1

我刚刚开始阅读《C 编程一种现代方法》一书,我有一个练习: 编写一个程序,声明几个 intfloat 变量,但不初始化它们,然后打印它们的值。这些值有任何模式吗?(通常没有。)

我在 Dev C++ 5.11 中运行此代码

我的代码:

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    int a,b,c,d,e,f,a1,a2,a3;
    float x,y,z,x1,x2,x3;
    
    printf("a:%d ,b:%d ,c:%d ,d:%d ,e:%d ,f:%d ,a1:%d ,a2:%d ,a3:%d \n x:%f ,y:%f ,z:%f ,x1:%f ,x2:%f ,x3:%f",a,b,c,d,e,f,a1,a2,a3,x,y,z,x1,x2,x3);
}

我得到的结果:Console

c variables declaration
1个回答
0
投票

它们将具有不确定的值,这基本上意味着它们将具有任意值。

该值可能为零,也可能是其他值。该值在不同的运行中可能会有所不同,或者取决于程序早期发生的情况。

它甚至可能是具有这些陷阱的机器上的陷阱表示,在这种情况下读取它是未定义的行为。

C17 §6.7.9 ¶10 定义了当对象未显式初始化时会发生什么:

如果一个具有自动存储期限的对象没有显式初始化,那么它的值是不确定的。如果具有静态或线程存储持续时间的对象未显式初始化,则:

  • 如果是指针类型,则初始化为空指针;
  • 如果是算术类型,则初始化为(正数或无符号)零;
  • 如果是聚合,则根据这些规则(递归地)初始化每个成员,并且任何填充都初始化为零位;
  • 如果是联合体,则根据这些规则(递归地)初始化第一个命名成员,并且任何填充都初始化为零位;

C17 §3.19.2 ¶1 定义不确定值如下:

未指定的值或陷阱表示

© www.soinside.com 2019 - 2024. All rights reserved.