1. 哪些变量需要初始化?
要养成好的编程习惯,通常局部变量都需要初始化,static类型的局部变量除外。
2. 为什么局部变量需要初始化?
因为局部变量是从stack或heap上直接分配的空间,而stack或heap上的空间是被反复使用的。
所以无法预知上一个时间点这块内存空间存了什么样的数据,这样有时可能会对程序的执行
结果造成影响。
3. 为什么static类型的局部变量或全局变量可以不用初始化?
static类型的局部变量仍然是从全局数据区分配空间的,所以我们也可以将其理解成一种特殊的
全局变量,这种特殊性体现在作用范围上,它的作用范围是某个函数体内或某个代码块内。
程序员可以按需对全局变量进行初始化,如果不初始化全局变量,那因为RAM掉电信息丢失的特性,
这些未初始化的全局变量都会被默认初始化为0。
我在下面这篇博文中有简单提及到存储器空间布局,有兴趣的话可以做个参考。
http://blog.csdn.net/boyxulin1986/article/details/11209265
4. static局部变量有什么作用?
所谓存在即合理,其优点是首先告诉编译器其是static类型的局部变量,所以必须要从全局数据区
分配内存;同时它是一个局部变量,它的作用范围就会限定在某个局部范围之内,这样别人也就
不会误用到。
那你如果真的要在函数体外定义一个全局变量,当然也能达到同样的目的。
5. 全局变量的使用?
如果你的全局变量要在多处使用,甚至是具有跨文件跨模块的特性,那么建议将其打包成函数来使用:
int get_value(void)
{
return g_value;
}
void set_value(int value)
{
g_value = value;
}
其好处是当程序错误时,有助于快速的定位到问题点。如果是在mulli-thread编程中,
那还要考虑使用必要的保护机制(如mutex),防止可能出现的race condition。
6. 局部变量的声明?
曾几何时,我们在C编程中都会将所有的局部变量的声明放在函数的最前面。
现代C语言已经支持随时随地在你需要时去声明一个局部变量,其好处是什么?
之前在网上看到一句话:“当你盖房子时,是愿意将锤子放在自己的手边还是邻居的院子里呢?”,
这种做法的好处就是当函数体较大时,可以提高代码的可读性(你不用在屏幕上来回翻页了)。
当然,关于这一点是有可能会出现争论的地方,这里不评论其好坏。
7. 为什么不能过多的使用全局变量?
我们知道,在编程时会不可避免的要使用到全局变量。但是过多的全局变量会增大模块之间的耦合性,
而耦合性增大了程序的可维护性以及可重用性就会降低。
以上是目前本人对变量初始话一块的心得体会;
如果其中有错误的地方,欢迎大家一起讨论。