| 
 | 
 
 
发表于 2022-8-19 17:58:16
|
显示全部楼层
 
 
 
 本帖最后由 jackz007 于 2022-8-19 18:19 编辑  
 
        用一个循环把它们的数值都打印出来一看不就一目了然了。 
- #include <stdio.h>
 
 - int main(void)
 
 - {
 
 -         int i , a[5] = {1, 3, 5}                         ;
 
 -         printf("%d" , a[0])                              ;
 
 -         for(i = 1 ; i <  5 ; i ++) printf(",%d", a[i])   ;
 
 -         printf("\n")                                     ;
 
 - }
 
  复制代码 
        这是 main() 函数对应的反汇编代码 
- 00401350  /$  55                         push    ebp
 
 - 00401351  |.  89E5                       mov     ebp, esp
 
 - 00401353  |.  83E4 F0                    and     esp, FFFFFFF0
 
 - 00401356  |.  83EC 30                    sub     esp, 30
 
 - 00401359  |.  E8 52060000                call    004019B0
 
 - 0040135E  |.  C74424 18 00000000         mov     dword ptr [esp+18], 0              ; | <--- a[0] = 0
 
 - 00401366  |.  C74424 1C 00000000         mov     dword ptr [esp+1C], 0              ; | <--- a[1] = 0
 
 - 0040136E  |.  C74424 20 00000000         mov     dword ptr [esp+20], 0              ; | <--- a[2] = 0
 
 - 00401376  |.  C74424 24 00000000         mov     dword ptr [esp+24], 0              ; | <--- a[3] = 0
 
 - 0040137E  |.  C74424 28 00000000         mov     dword ptr [esp+28], 0              ; | <--- a[4] = 0
 
 - 00401386  |.  C74424 18 01000000         mov     dword ptr [esp+18], 1              ; | <--- a[0] = 1
 
 - 0040138E  |.  C74424 1C 03000000         mov     dword ptr [esp+1C], 3              ; | <--- a[1] = 3
 
 - 00401396  |.  C74424 20 05000000         mov     dword ptr [esp+20], 5              ; | <--- a[2] = 5
 
 - 0040139E  |.  8B4424 18                  mov     eax, dword ptr [esp+18]            ; |
 
 - 004013A2  |.  894424 04                  mov     dword ptr [esp+4], eax             ; |
 
 - 004013A6  |.  C70424 24304000            mov     dword ptr [esp], 00403024          ; |ASCII "%d"
 
 - 004013AD  |.  E8 6E080000                call    <jmp.&msvcrt.printf>               ; \printf
 
 - 004013B2  |.  C74424 2C 01000000         mov     dword ptr [esp+2C], 1
 
 - 004013BA  |>  837C24 2C 04               /cmp     dword ptr [esp+2C], 4             ; |
 
 - 004013BF  |.  7F 1F                      |jg      short 004013E0                    ; |
 
 - 004013C1  |.  8B4424 2C                  |mov     eax, dword ptr [esp+2C]           ; |
 
 - 004013C5  |.  8B4484 18                  |mov     eax, dword ptr [esp+eax*4+18]     ; |
 
 - 004013C9  |.  894424 04                  |mov     dword ptr [esp+4], eax            ; |
 
 - 004013CD  |.  C70424 27304000            |mov     dword ptr [esp], 00403027         ; |ASCII ",%d"
 
 - 004013D4  |.  E8 47080000                |call    <jmp.&msvcrt.printf>              ; \printf
 
 - 004013D9  |.  834424 2C 01               |add     dword ptr [esp+2C], 1
 
 - 004013DE  |.^ EB DA                      \jmp     short 004013BA
 
 - 004013E0  |>  C70424 0A000000            mov     dword ptr [esp], 0A                ; |
 
 - 004013E7  |.  E8 3C080000                call    <jmp.&msvcrt.putchar>              ; \putchar
 
 - 004013EC  |.  B8 00000000                mov     eax, 0
 
 - 004013F1  |.  C9                         leave
 
 - 004013F2  \.  C3                         retn
 
  复制代码 
        从中可以看出,程序先把 a[] 的所有 5 个元素初始化为 0 值,然后,再分别为 a[0]、a[1]、a[2] 赋值为 1、3、5,所以,a[3] 的值一定是 0。 |   
 
 
 
 |