C语言中变量为啥要初始化?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中变量为啥要初始化?相关的知识,希望对你有一定的参考价值。
最近在听郝斌老师的C语言课程,其中讲到变量为什么要初始化。他说变量对应在内存上有一块,然后不初始话的话那么得到的数据就是上一次使用这一块内存的数据。 但是我有点问题,我没有进行初始化,那么得到的数据和他视频中的数据是一样的啊?? 说明这一段数据应该不是上一个程序残留的 那么这一段数据是什么意思呢? 这是视频地址,我说的可能不太明白,请高手到这里看看。。就知道我的意思了 http://www.sp299.com/NeiRong_WenZhang_498961_1307567_cn.html
1.在效果来说没有很大区别,最终的结果都把一个数据(data)送入了变量2.使用的时候需要注意的点:
a.对于全局变量,定义时若未初始化,那么大部分情况下(某些编译器可能没有)会赋予0
b.对于局部变量,定义时若未初始化,那么大部分情况下,其值可以被当做是随机的.
许多情况下的错误正是由于局部变量未初始化造成的 参考技术A 其实这种说法也对也不对
从理论来讲
一块内存是会继承它所在空间原来的值
但是往往编译器为了让程序员能够及时发现错误做了一些小小的调整
例如很多编译器
在我们定义了一个int型未初始化的变量之后
里面其实给定了默认值
例如
:
-858993460
如果很奇怪这个数字是怎么来了
你可以试一下用十六进制的形式输出就了解了
在C语言中,为啥定义变量的时候总是初始化为0呢?该怎么理解。
请问为什么很多时候都是初始化为0,这个0是一个整数型的数值还是一个概念东西。
搞不懂为什么是0而不是其他的?希望能举例说明。
谢谢下面各位的回复。
存在这种可能,该地址以前已使用过,但系统并没有回收,擦除。就存在脏数据。本回答被提问者采纳 参考技术B 如果你不想去研究汇编代码,那就记住:静态存储区的变量初始化为0,堆栈区(也就是局部)的变量初始化值看编译器,VC++6.0里的编译器初始化时把函数要用的堆栈区全初始化为0xcccccccc,而堆区(动态开辟)的值是不定的。
给你一个简单的测试
#include <stdio.h>
#include <malloc.h>
int a;
int main()
int b;
int *c = (int *)malloc(sizeof(int));
static int d;
printf("%x\n%x\n%x\n%x\n", a,b,*c,d);
free(c);
return 0;
参考技术C 如果全局变量在定义时不初始化则初始值是0,如果局部变量在定义时不初始化则初始值是不确定的。 参考技术D 谁说总是初始化0的,全局变量和静态变量会,局部变量不一定,可恨的不同的编译所采用的方式可能也不一样,所以建议在使用任何变量前自己要初始化
以上是关于C语言中变量为啥要初始化?的主要内容,如果未能解决你的问题,请参考以下文章