本帖最后由 冷漠 于 2010-5-7 09:35 编辑
22#
我刚验证了一下,确实看不出使用全局还是局部有什么差别。唯一的区别就是,局部变量在函数每次被调用时,ret[4]数组都被初始化为0,而全局变量只能在编译阶段被初始化一次!以后每次 read_byte(); 被调用时,ret[4]数组初值都不为0。
31#
所以,根据22楼,使用全局变量时,下面的ret[0]+mid 初值并不等于 0+mid !正如26楼所说,ret[0]里面是上一次的结果数值。
......
for(j=0;j<4;j++)
(
mid=back[j] <<i;
ret[j]=ret[j]+mid;
}
........
知道原因,只要修改第一种情况,在函数中添加一句全局变量赋初值0即可:
uchar read_byte()
{
uchar i,j;
uchar mid;
ret[0]=0; ret[1]=0; ......
for(i=0;i<8;i++)
{
read_bit();
for(j=0;j<4;j++)
{
mid=back[j] <<i;
ret[j]=ret[j]+mid;
}
}
return ret[0];
}
冷漠 发表于 2010-5-6 17:24
正确答案应该是31楼。 |