数组

Tutorial: C与汇编 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. 数组长度分配
int main()
{
    // 不加这一行   00401013   sub         esp,40h
    // 加这一行     00401013   sub         esp,68h
    // 默认是40(64字节), 68 - 40 = 28(40字节),1个int是4个字节, 10 * 4 = 40
    int ageArr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    // 0040D408   mov         dword ptr [ebp-28h],1
    // 0040D40F   mov         dword ptr [ebp-24h],2
    // 0040D416   mov         dword ptr [ebp-20h],3
    // 0040D41D   mov         dword ptr [ebp-1Ch],4
    // 0040D424   mov         dword ptr [ebp-18h],5
    // 0040D42B   mov         dword ptr [ebp-14h],6
    // 0040D432   mov         dword ptr [ebp-10h],7
    // 0040D439   mov         dword ptr [ebp-0Ch],8
    // 0040D440   mov         dword ptr [ebp-8],9
    // 0040D447   mov         dword ptr [ebp-4],0Ah


    // 4C - 40 = C = 12, 本来需要10个字节,给了12个,因为是4的整数倍
    char ageArr[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g'};
    // 0040D3F9   lea         edi,[ebp-4Ch]
    // 0040D3FC   mov         ecx,13h
    // 0040D401   mov         eax,0CCCCCCCCh
    // 0040D406   rep stos    dword ptr [edi]
    // 5:        char ageArr[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g'};
    // 0040D408   mov         byte ptr [ebp-0Ch],61h
    // 0040D40C   mov         byte ptr [ebp-0Bh],62h
    // 0040D410   mov         byte ptr [ebp-0Ah],63h
    // 0040D414   mov         byte ptr [ebp-9],64h
    // 0040D418   mov         byte ptr [ebp-8],65h
    // 0040D41C   mov         byte ptr [ebp-7],66h
    // 0040D420   mov         byte ptr [ebp-6],67h
    // 0040D424   mov         byte ptr [ebp-5],68h
    // 0040D428   mov         byte ptr [ebp-4],69h
    // 0040D42C   mov         byte ptr [ebp-3],67h

    // 同理 short ageArr 长度是 20 字节
    return 0;
}
2. 多维数组
#include <stdio.h>

int main()
{
    int arr[2][3] = {
        {1, 2, 3},
        {4, 5, 6},
    };
    return 0;
}

// 58 - 40 = 18 = 24 字节 = 4 * 6, 顺序排列,连续存储,没有多维的概念,只是为了方便人使用
// 0040D3F9   lea         edi,[ebp-58h]
// 0040D3FC   mov         ecx,16h
// 0040D401   mov         eax,0CCCCCCCCh
// 0040D406   rep stos    dword ptr [edi]
// 5:        int arr[2][3] = {
// 6:            {1, 2, 3},
// 0040D408   mov         dword ptr [ebp-18h],1
// 0040D40F   mov         dword ptr [ebp-14h],2
// 0040D416   mov         dword ptr [ebp-10h],3
// 7:            {4, 5, 6},
// 0040D41D   mov         dword ptr [ebp-0Ch],4
// 0040D424   mov         dword ptr [ebp-8],5
// 0040D42B   mov         dword ptr [ebp-4],6
// 8:        };
Prev: 循环语句 Next: 结构体