浙江某公司的一道笔试题,,大家进来讨论下
1.int count = 3;
2.int main(void)
3.{
4. int i, sum, count = 2;
5. for(i=0,sum=0; i<count; i+=2,count++)
6. {
7. static int count = 4;
8. count++;
9. if(i%2 == 0)
10. {
11. extern int count;
12. count++;
13. sum += count;
14. }
15. sum += count;
16. }
17. printf("%d %d\n",count, sum);
18. return 0;
19.}
10: int count = 3;
11: int main(void)
12: {
00411420 55 push ebp
00411421 8B EC mov ebp,esp
00411423 81 EC E4 00 00 00 sub esp,0E4h
00411429 53 push ebx
0041142A 56 push esi
0041142B 57 push edi
0041142C 8D BD 1C FF FF FF lea edi,[ebp-0E4h]
00411432 B9 39 00 00 00 mov ecx,39h
00411437 B8 CC CC CC CC mov eax,0CCCCCCCCh
0041143C F3 AB rep stos dword ptr es:[edi]
13: int i, sum, count = 2;
0041143E C7 45 E0 02 00 00 00 mov dword ptr [count],2
14: for(i=0,sum=0; i<count; i+=2,count++)
00411445 C7 45 F8 00 00 00 00 mov dword ptr [i],0
0041144C C7 45 EC 00 00 00 00 mov dword ptr [sum],0
00411453 EB 12 jmp main+47h (411467h)
00411455 8B 45 F8 mov eax,dword ptr [i]
00411458 83 C0 02 add eax,2
0041145B 89 45 F8 mov dword ptr [i],eax
0041145E 8B 4D E0 mov ecx,dword ptr [count]
00411461 83 C1 01 add ecx,1
00411464 89 4D E0 mov dword ptr [count],ecx
00411467 8B 45 F8 mov eax,dword ptr [i]
0041146A 3B 45 E0 cmp eax,dword ptr [count]
0041146D 7D 47 jge main+96h (4114B6h)
15: {
16: static int count = 4;
17: count++;
0041146F A1 A0 90 41 00 mov eax,dword ptr [count (4190A0h)]
00411474 83 C0 01 add eax,1
00411477 A3 A0 90 41 00 mov dword ptr [count (4190A0h)],eax
18: if(i%2 == 0)
0041147C 8B 45 F8 mov eax,dword ptr [i]
0041147F 25 01 00 00 80 and eax,80000001h
00411484 79 05 jns main+6Bh (41148Bh)
00411486 48 dec eax
00411487 83 C8 FE or eax,0FFFFFFFEh
0041148A 40 inc eax
0041148B 85 C0 test eax,eax
0041148D 75 19 jne main+88h (4114A8h)
19: {
20: extern int count;
21: count++;
0041148F A1 9C 90 41 00 mov eax,dword ptr [count (41909Ch)]
00411494 83 C0 01 add eax,1
00411497 A3 9C 90 41 00 mov dword ptr [count (41909Ch)],eax
22: sum += count;
0041149C 8B 45 EC mov eax,dword ptr [sum]
0041149F 03 05 9C 90 41 00 add eax,dword ptr [count (41909Ch)]
004114A5 89 45 EC mov dword ptr [sum],eax
23: }
24: sum += count;
004114A8 8B 45 EC mov eax,dword ptr [sum]
004114AB 03 05 A0 90 41 00 add eax,dword ptr [count (4190A0h)]
004114B1 89 45 EC mov dword ptr [sum],eax
25: }
004114B4 EB 9F jmp main+35h (411455h)
26: printf("%d %d\n",count, sum);
004114B6 8B F4 mov esi,esp
004114B8 8B 45 EC mov eax,dword ptr [sum]
004114BB 50 push eax
004114BC 8B 4D E0 mov ecx,dword ptr [count]
004114BF 51 push ecx
004114C0 68 00 6D 41 00 push offset string "%d %d\n" (416D00h)
004114C5 FF 15 D0 A2 41 00 call dword ptr [__imp__printf (41A2D0h)]
004114CB 83 C4 0C add esp,0Ch
004114CE 3B F4 cmp esi,esp
004114D0 E8 8E FC FF FF call @ILT+350(__RTC_CheckEsp) (411163h)
27: getchar();
004114D5 8B F4 mov esi,esp
004114D7 FF 15 D4 A2 41 00 call dword ptr [__imp__getchar (41A2D4h)]
004114DD 3B F4 cmp esi,esp
004114DF E8 7F FC FF FF call @ILT+350(__RTC_CheckEsp) (411163h)
28: return 0;
004114E4 33 C0 xor eax,eax
29: }
1.int count = 3;
2.int main(void)
3.{
4. int i, sum, count = 2;
5. for(i=0,sum=0; i<count; i+=2,count++) //这里的count叠加的是count = 2的变量,这里的变量会把全局count=3屏蔽掉
6. {
7. static int count = 4;
8. count++; //这里的count叠加的是上一句的static count
9. if(i%2 == 0)
10. {
11. extern int count;
12. count++; //这里叠加的是全局的count=2哪句的的变量,因为上一句用extern扩展作用域
13. sum += count;//这一句叠加的是这个作用域的变量,即全局哪个count
14. }
15. sum += count; //这个叠加的是和这个同一级作用域的static count的变量
16. }
17. printf("%d %d\n",count, sum); //这里输出的是和这句同一级作用域的变更,即for上一行的count变量
18. return 0;
19.}