博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言变量初始化重要吗,在C中声明的未初始化变量会发生什么?它有价值吗?...
阅读量:5254 次
发布时间:2019-06-14

本文共 540 字,大约阅读时间需要 1 分钟。

7df46de770f2a306752ce84282eaa5f5.png

明月笑刀无情

静态变量(文件范围和函数静态)初始化为零:int x; // zeroint y = 0; // also zerovoid foo() {

    static int x; // also zero}非静态变量(局部变量)是不确定的。在分配值之前读取它们会导致未定义的行为。void foo() {

    int x;

    printf("%d", x); // the compiler is free to crash here}在实践中,它们最初只是有一些荒谬的价值 - 一些编译器甚至可能会在查看调试器时输入特定的固定值以使其显而易见 - 但严格来说,编译器可以自由地执行从崩溃到召唤的任何操作恶魔通过你的鼻腔通道。至于为什么它是未定义的行为而不是简单的“未定义/任意值”,有许多CPU架构在其各种类型的表示中具有额外的标志位。一个现代的例子是Itanium,它的寄存器中有一个“Not a Thing”位 ; 当然,C标准起草人正在考虑一些较旧的架构。尝试使用设置了这些标志位的值可能会导致操作中的CPU异常确实不应该失败(例如,整数加法或分配给另一个变量)。如果你继续保留未初始化的变量,编译器可能会设置这些标志位的随机垃圾 - 意味着触摸未初始化的变量可能是致命的。

转载地址:http://pzrav.baihongyu.com/

你可能感兴趣的文章
hadoop伪分布式模式的搭建
查看>>
字符串查找
查看>>
BZOJ 3211 弗洛拉前往国家 树阵+并检查集合
查看>>
BZOJ 1150 CTSC2007 数据备份Backup 堆+馋
查看>>
秒杀程序数据库设计
查看>>
【OpenCV新手教程之十二】OpenCV边缘检測:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑...
查看>>
JavaScript递归
查看>>
UI篇—懒加载
查看>>
最大似然估计、最大后验估计、贝叶斯估计的对比
查看>>
HTTP协议①介绍
查看>>
CSS-2
查看>>
Spring Cloud 微服务实战
查看>>
【转】正向代理vs反向代理
查看>>
基于MYSQL存储过程生成1-10万,不重复随机数.
查看>>
golang的定时器简单使用
查看>>
Problem A: 重载函数:max
查看>>
Problem B: 默认参数:求圆面积
查看>>
关于jvm内存
查看>>
解析MYsql写的表达式
查看>>
从一个点子到一个社区APP,是如何通过.NET实现的?——“文林物业系统”APP介绍及采访记录...
查看>>