先看一段代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
void func2(void)
{
int a;
printf("%d\n", a);
}
void func1(void)
{
int a=5;
printf("%d\n", a);
}
func1();
func2();
return 0;
}
输出是5 5
在栈中因为第一个a=5分配且初始化,第二个a没有初始化,则指向第一个a,也为5。
下一个就是预定输出了
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
void func2(void)
{
int a=3;
printf("%d\n", a);
}
void func1(void)
{
int a=5;
printf("%d\n", a);
}
func1();
func2();
return 0;
}
输出5 3
以上均是gcc编译的
下面就更有意思了
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int a;
printf("%d\n", a);
return 0;
}
在gcc是0
在vc6.0中是一个随意的数 垃圾数;
前两个例子大家也可以在vc6.0中试试结果,这个我没试,具体不知。
综上所述,局部变量初始化很重要很重要很重要重要的事情说3遍。