为什么全局变量无须初始化,局部变量必须初始化
展开全部
这个说法本身就不对。变量需要不需要初始化是根据需要来进行的。全局变量有时也需要初始化,而局部变量其实大部分时间都没有初始化。不要把赋初值与初始化混淆了:初始化是由编译器做的,形成可执行文件后,那些变量的值就在软件文件中放着,执行程序时直接使用了;而赋初值是由C/C++代码实现的,程序开始执行后才给变量赋的值。只是全局变量如果不显式初始化,那么编译时由编译器自动初始化为0,而编译器对局部变量是否有值视而不见,所以在程序开始执行前局部变量的“值”是机器垃圾。因此,局部变量在获得初值前若当右值使用就要出问题!局部变量获得初值有两个途径:一是初始化,如int x=3;就是在声明x的类型时同时初始化为3——x==3这个值在编译时就被编译器确定了,程序启动后不再执行int x=3;这种操作;二是赋初值,如int x;x=3;,int x;在编译时执行,只声明了变量类型,值是垃圾,x=3;是C/C++语句,每次启动程序都要执行,将变量x赋值为3。所以,说“局部变量其实大部分时间都没有初始化”,就是指我们创建函数时往往只写int a,b,c,x,y,z;而并不给每个变量都初始化一个确定的值,而是在使用前给它们赋初值,如紧接着写scanf("%d%d%d",&a,&b,&c);或for(x=0;x<10;x++){...}(其中x=0是给x赋初值)等。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询