您的位置:首页 > 其它

数组初始化问题:int a[3]={0}和int a[3]={1}的区别

2011-06-26 21:42 381 查看
数组定义同时初始化是个常见的问题,比如,int a[3]={0},其中a[0],a[1],a[2]这三个值都为0。
如果这样定义,同时赋值:int a[3]={1},是不是意味着a[0]=1,a[1]=1,a[2]=1呢?这是一个很容易出错的问题,答案肯定不是这样,笔者在多个编译器上试过,结果只有a[0]=1,而a[1]=0,a[2]=0。
如果要追究原因,只能去问搞编译器的人。语言有时候很难说为什么这样,或许只能方便而已。这是vc6.0下的汇编:
……
4: int a[3]={0};
00401028 mov dword ptr [ebp-0Ch],0 ;a[0]=0
0040102F xor eax,eax ;寄存器eax清零,eax的值为0
00401031 mov dword ptr [ebp-8],eax ;把eax的值赋给a[1],所以a[1]=0
00401034 mov dword ptr [ebp-4],eax;把eax的值赋给a[2],所以a[1]=0
5: int b[3]={1};
00401037 mov dword ptr [ebp-18h],1;b[0]=1
0040103E xor ecx,ecx;寄存器ecx清零, ecx的值为0
00401040 mov dword ptr [ebp-14h],ecx;把ecx的值赋给b[1],所以b[1]=0
00401043 mov dword ptr [ebp-10h],ecx;把ecx的值赋给b[2],所以b[1]=0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐