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

问题描述 投票:0回答:1
我刚开始看书 由 K N King 称为

C 编程:现代方法,第 2 版 2008 年, 我有一个练习:

    编写一个程序,声明几个
  • 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.