即使是C语言这种,也有不需要初始化的变量,例如静态变量static,规则如下:对于原生数据类型,以对应类型的零值进行初始化;对于类中的静态对象,由其默认的构造函数来进行初始化。
另外全局变量,还有用calloc()函数分配到的空间,都会被自动初始化。所以题主你理解的变量必须要初始化其实只是由于在C或者类似语言中,局部的自动变量和寄存器变量是从堆、栈或者寄存器上临时分配(重复使用),我们不知道之前的代码究竟对这个空间做过什么,所以值会是随机的。
除非编译器设为调试模式(debug),此时编译器往往会自动对局部变量进行初始化(0xcc),这也是有时调试模式编译运行成功但是发行模式(release)编译运行出错的原因。
全局变量和静态变量之所以不需要初始化是因为,作用范围为全局的变量(包括全局和静态)会从全局变量区分配空间,而由于RAM存储器特性,这些变量会被自动清零。
匿名回答于2019-06-28 00:22:21