C中全局变量和局部变量的初始化问题
2014-02-14 14:38
1001 查看
在C中初始化一个全局变量 和 在一个函数中初始化一个局部变量, 如果初始化时不赋值默认值都为0吗?
不是的。只有全局变量初始化时的默认值为0,而局部变量默认值是不确定的。所以,局部变量在使用之前一定要先赋值,如果基于一个不确定的值做后续运算必然会引入bug。
下面看一个错误的例子:
#include <stdio.h>
int add_range(int low, int high)
{
int i, sum;
for (i = low; i <= high; i++)
sum = sum + i;
return sum;
}
int main(void)
{
int result[100];
result[0] = add_range(1, 10);
result[1] = add_range(1, 100);
printf("result[0]=%d\nresult[1]=%d\n",result[0],result[1]);
return 0;
}
编译运行之后打印结果为:
result[0]=55
result[1]=5105
结果正确吗?显然第二个结果是错误的!result[1]应该等于5050。
原因就是因为add_range函数中局部变量i,sum没有初始化,所以具有不确定的值,当add_range(1,10)执行完毕之后,紧接着执行add_range(1,100),所有i和sum正好取了上次调用的值,所以这次执行的时候i=11,sum=55。i会在for语句执行的时候重新赋值,所以不会出错,但sum的初始值就是从55开始累加的,所以最后结果会比正确值多出55来。因此局部变量的初始化一定要注意!
不是的。只有全局变量初始化时的默认值为0,而局部变量默认值是不确定的。所以,局部变量在使用之前一定要先赋值,如果基于一个不确定的值做后续运算必然会引入bug。
下面看一个错误的例子:
#include <stdio.h>
int add_range(int low, int high)
{
int i, sum;
for (i = low; i <= high; i++)
sum = sum + i;
return sum;
}
int main(void)
{
int result[100];
result[0] = add_range(1, 10);
result[1] = add_range(1, 100);
printf("result[0]=%d\nresult[1]=%d\n",result[0],result[1]);
return 0;
}
编译运行之后打印结果为:
result[0]=55
result[1]=5105
结果正确吗?显然第二个结果是错误的!result[1]应该等于5050。
原因就是因为add_range函数中局部变量i,sum没有初始化,所以具有不确定的值,当add_range(1,10)执行完毕之后,紧接着执行add_range(1,100),所有i和sum正好取了上次调用的值,所以这次执行的时候i=11,sum=55。i会在for语句执行的时候重新赋值,所以不会出错,但sum的初始值就是从55开始累加的,所以最后结果会比正确值多出55来。因此局部变量的初始化一定要注意!
相关文章推荐
- 全局变量和局部变量初始化问题
- C/C++中全局变量,静态局部变量,局部变量的初始化问题
- C: 局部变量、全局变量初始化问题
- 局部变量和全局变量的相关问题
- 关于C/C++中全局变量的初始化问题的深入思考
- app中出现的发起fetch请求,里面的回调函数中出现局部变量向全局变量传值的问题
- C 中,未初始化的 全局变量, static 变量 ,局部变量的缺省值
- static lib中全局变量初始化问题
- c语言全局变量和局部变量问题汇总
- 关于全局、static对象/变量的初始化问题
- 全局变量与局部变量的初始化
- 全局变量和静态变量的初始化问题
- 关于对于c语言全局变量初始化问题
- c语言全局变量和局部变量问题及解决汇总
- 局部变量,全局变量初始值问题----C与指针练习题4.14.1
- c语言全局变量和局部变量问题汇总
- C++全局变量初始化引发的问题
- c语言全局变量和局部变量问题汇总
- c语言全局变量和局部变量问题汇总
- C/C++全局变量和局部变量作用域问题