博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C语言中的未初始化变量的值
阅读量:4260 次
发布时间:2019-05-26

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

我们在刚学C编程的时候经常碰到“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”,这是为什么呢?

先从上次某公司笔试说起,当时有一题是考到了关于变量初始化的问题。在主函数外面(全局)和里面(局部)个定义一个int类型数值。然后没有赋值,直接打印出来,问输出什么。那会只知道全局默认是0,局部是一个负的挺大的数,还以为是最小整数。回来后试了下,局部的int默认的是-858993460,即0xcccccccc。

但是为什么局部的默认是0xcccccccc而不是其他的?

查了一些资料,发现VC的DEBUG版会把未初始化的指针自动初始化为0xCCCCCCCC,而不是就让它随机去,那是因为DEBUG版的目的是为了能让程序员更早的发现错误,把堆栈上的数据对初始化成了0xcc,也就是说局部变量如果不初始化,那么DEBUG版本中就会是0xCC,如果野指针的初值不确定。而汉字“烫”的编码恰好就是1100110011001100,这也就为什么初学的时候会出现“烫”了,因为那会经常会忘记赋值或者数组越界了。而全局变量链接时已分配空间,程序运行时,操作系统的加载器,负责把链接器分配给全局变量的虚拟内存空间,映射到一个初始化为零的页面,所以被初始化为零。全局和静态的默认初始化都是靠加载机制实现的。另外:未初始化的符号在目标文件的bss段中,而初始化的符号在data段中。

局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。

window环境debug模式下,系统会自动将没有设置初值的变量设置为0xcccccccc;在release模式下,没有赋值的变量其取值不可预知,这取决于该变量对应的内存空间在被分给这个变量之前,这块内存被系统写入了什么数据。

来源:http://blog.csdn.net/deqingguo/article/details/8001557

http://zhidao.baidu.com/link?url=IqwJifHeZusNKUkxojl0rLIl6JpIrTGXGr2h0wrE2t6rVD7Ru3N9V77KyET5cPcaWsQiwjII_tf1uOZbOxLWGa

你可能感兴趣的文章
Python笔记:对文件的读写操作
查看>>
Python笔记:详解使用Python列表创建ndarray
查看>>
Typescript 中的类的应用
查看>>
Python笔记:NumPy中的布尔型索引使用举例
查看>>
Python笔记:NumPy 中的集合运算举例: 查找共同元素,差异元素和共有元素
查看>>
Python笔记:访问或修改 Pandas Series 中的元素以及相关运算
查看>>
Python笔记:Pandas DataFrames 的使用
查看>>
Python笔记:在Pandas中处理NaN值
查看>>
Python笔记:初识Matplotlib和Seaborn
查看>>
Typescript 中的接口的实现
查看>>
Typescript中的泛型的使用
查看>>
JavaScript中使用offset时遇到的bug
查看>>
java基础入门(一)
查看>>
Java基础入门(二)
查看>>
Java基础入门(三)
查看>>
Java基础入门(四)
查看>>
Java基础入门(十)
查看>>
Java基础入门(完结篇)
查看>>
Java进阶之面向对象(一)——继承
查看>>
Java进阶之自定义ArrayList&斗地主发牌案例
查看>>