未初始化变量的值是多少?

我尝试了以下代码


#include<stdio.h>

void main()

{

int i; \

printf('%d',i);

}

结果在VC ++中给出了垃圾值,而在tc中相同为零。正确的值是多少?默认情况下,未初始化的变量的值为零吗?否则将包含垃圾值?


接下来是一样的


#include<stdio.h> 

void main()

{

int i,j,num;

j=(num>0?0:num*num);

printf("\n%d",j);

}

上面的代码将输出什么?


哆啦的时光机
浏览 767回答 3
3回答

Qyouu

从技术上讲,未初始化的非静态局部变量的值是Indeterminate [Ref 1]。简而言之,可以是任何东西。访问此类未初始化的变量将导致未定义的行为。[参考2][Ref 1]C99第6.7.8节初始化:如果未自动初始化具有自动存储期限的对象,则其值不确定。[参考2]C99第3.18节未定义的行为:使用非便携式或错误程序构造时的行为,错误数据或不确定值的对象,对此本国际标准不施加任何要求。注意:强调我的。

三国纷争

在C和C ++中,访问统一变量都是未定义的行为,因此可以读取任何值。您的程序也有可能崩溃:一旦进入未定义的行为领域,所有赌注都将变为1。1我从未见过程序会因访问未初始化的变量而崩溃,除非它是指针。

不负相思意

它是未定义的。在不同的编译器,不同的操作系统,不同的程序运行情况之间,可能有所不同。它甚至可能不是一个特定的值:由于未定义效果,因此允许编译器对此代码执行任何操作。它可能会选择优化整个程序。它甚至可能选择用安装键盘记录程序并窃取您所有网上银行登录详细信息的程序替换您的程序。如果您想知道该值,唯一的方法是设置它。
打开App,查看更多内容
随时随地看视频慕课网APP