您的位置:首页 > 其它

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来。因此局部变量的初始化一定要注意!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  局部变量初始化