变量未初始化,为何获得的值有的是0,有的是随机值?

要解释为何全局变量未初始化为何是0,而动态局部变量是一个随机数,就要先弄清楚静态,动态是什么,局部,全局又是什么.而后再思考为何静态是0,就要思考它们的存储方式,所以天然就要了解内存的内部结构,而后了解它们的原理,天然就明白了.同时还能就是下初始化和赋值的区别.函数

#初始化和赋值的区别是什么?.net

  1. 初始化:声明变量的时候同时赋值,声明的时候会划出新的内存区域,同时
  2. 赋值:

#变量的储存方式:静态储存和动态储存.code

  1. 静态存储:变量定义的时候,分配了必定的内存单元,在整个程序中,内存单元都不变.只能初始化一次,能够屡次赋值,静态存储变量不初始化则初始为0.blog

  2. 动态存储:程序执行过程当中才分配内存单元,使用完后就释放,如形参.函数的形式参数就是动态存储方式,声明函数的时候不给它分配内存单元.调用的时候传入实参,就分配内存单元,而后函数执行完后,就释放内存.动态存储变量若不初始化,则初始值为一个随机数.内存


##怎么声明变量的存储方式?作用域

  1. 全局变量包括全局变量和静态全局变量,都是静态存储,所以未初始值未0,静态局部变量是静态存储,只有动态局部变量是动态存储.get

  2. 加上static前缀就是静态存储变量,如static int a = 0;io

  3. 不加static前缀默认就是动态存储变量,如int b = 1;(若是是全局变量则因而静态存储.)变量


##内存存储空间的分配:原理

  1. 动态存储区域:即存储用动态存储方式的变量的内存区域,如函数形参,没有加static前缀的局部变量(即动态局部变量),函数返回地址

  2. 静态存储区域:即存储用静态存储方式的变量的内存区域,如全局变量,静态全局变量.(没有动态全局变量)

  3. 程序区:存放程序语句.


#变量的做用域:局部和全局.

  1. 全局变量:在全部函数外定义(包含主函数),全部函数均能调用.全局变量都是静态存储,没初始化时默认为0;

  2. 局部变量:函数内部定义,只适用于当前函数.没初始化时,如果静态存储,则为0,如果动态存储,则为随机值.

#静态全局变量和全局变量的区别?

  1. 注意,它们都是静态存储,不存在动态存储变量.主要是做用域不一样.静态全局变量只适用于当前文件,初始值为0;
  2. 而全局变量能够extern在其余文件使用.若同时出现两个相同变量名的不一样类型变量,做用域小的起做用.初始值也为0;

#静态局部变量和(动态)局部变量的区别?

  1. 做用域相同,但内存释放周期不一样.动态局部变量当函数执行结束后,就释放内存.下次在调用时又能够对其初始化.初始值为随机数.

  2. 而静态局部变量则在整个程序中都不会释放内存,下一次调用时仍是上一次的值.初始值为0;


#为何静态存储未初始化时,初始值为0,而动态则为一个随机数?

https://www.zhihu.com/question/49111720
https://blog.csdn.net/u010191034/article/details/39124505

相关文章
相关标签/搜索