zoukankan      html  css  js  c++  java
  • 汇编的角度分析C语言多维数组

     反汇编:

    8:
    9:        int arr[3][4] = {
    10:       {1,2,3,4},
    00401038   mov         dword ptr [ebp-30h],1
    0040103F   mov         dword ptr [ebp-2Ch],2
    00401046   mov         dword ptr [ebp-28h],3
    0040104D   mov         dword ptr [ebp-24h],4
    11:       {5,6,7,8},
    00401054   mov         dword ptr [ebp-20h],5
    0040105B   mov         dword ptr [ebp-1Ch],6
    00401062   mov         dword ptr [ebp-18h],7
    00401069   mov         dword ptr [ebp-14h],8
    12:       {9,7,6,5}
    00401070   mov         dword ptr [ebp-10h],9
    00401077   mov         dword ptr [ebp-0Ch],7
    0040107E   mov         dword ptr [ebp-8],6
    00401085   mov         dword ptr [ebp-4],5
    13:   };
    14:   }
    2、给定部分值        
            
    int arr[3][4] = {        
            
        {1,2},    
        {5},    
        {9}    
    } 
    反汇编:

    8: int arr[3][4] = {
    9:
    10: {1,2},
    0040D7AE mov dword ptr [ebp-30h],1
    0040D7B5 mov dword ptr [ebp-2Ch],2
    0040D7BC xor eax,eax
    0040D7BE mov dword ptr [ebp-28h],eax
    0040D7C1 mov dword ptr [ebp-24h],eax
    11: {5},
    0040D7C4 mov dword ptr [ebp-20h],5
    0040D7CB xor ecx,ecx
    0040D7CD mov dword ptr [ebp-1Ch],ecx
    0040D7D0 mov dword ptr [ebp-18h],ecx
    0040D7D3 mov dword ptr [ebp-14h],ecx
    12: {9}
    0040D7D6 mov dword ptr [ebp-10h],9
    0040D7DD xor edx,edx
    0040D7DF mov dword ptr [ebp-0Ch],edx
    0040D7E2 mov dword ptr [ebp-8],edx
    0040D7E5 mov dword ptr [ebp-4],edx
    13: };
    14:

    int arr2[3][4] = {        
            
        {1,2,3,4,5},    
        {5},    
        {9}    
    }     

    反汇编:

    15: int arr2[3][4] = {
    16:
    17: {1,2,3,4},
    0040D7E8 mov dword ptr [ebp-60h],1
    0040D7EF mov dword ptr [ebp-5Ch],2
    0040D7F6 mov dword ptr [ebp-58h],3
    0040D7FD mov dword ptr [ebp-54h],4
    18: {5},
    0040D804 mov dword ptr [ebp-50h],5
    0040D80B xor eax,eax
    0040D80D mov dword ptr [ebp-4Ch],eax
    0040D810 mov dword ptr [ebp-48h],eax
    0040D813 mov dword ptr [ebp-44h],eax
    19: {9}
    0040D816 mov dword ptr [ebp-40h],9
    0040D81D xor ecx,ecx
    0040D81F mov dword ptr [ebp-3Ch],ecx
    0040D822 mov dword ptr [ebp-38h],ecx
    0040D825 mov dword ptr [ebp-34h],ecx
    20: };

    
    
    3、省略里面的{ }                    
                        
    int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};     
    反汇编:

    8: int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    0040D7AE mov dword ptr [ebp-30h],1
    0040D7B5 mov dword ptr [ebp-2Ch],2
    0040D7BC mov dword ptr [ebp-28h],3
    0040D7C3 mov dword ptr [ebp-24h],4
    0040D7CA mov dword ptr [ebp-20h],5
    0040D7D1 mov dword ptr [ebp-1Ch],6
    0040D7D8 mov dword ptr [ebp-18h],7
    0040D7DF mov dword ptr [ebp-14h],8
    0040D7E6 mov dword ptr [ebp-10h],9
    0040D7ED mov dword ptr [ebp-0Ch],0Ah
    0040D7F4 mov dword ptr [ebp-8],0Bh
    0040D7FB mov dword ptr [ebp-4],0Ch

    int arr2[3][4] = {1,2,3,4,5,6,7,8,9,10};                    
    反汇编:

    10: int arr2[3][4] = {1,2,3,4,5,6,7,8,9,10};
    0040D802 mov dword ptr [ebp-60h],1
    0040D809 mov dword ptr [ebp-5Ch],2
    0040D810 mov dword ptr [ebp-58h],3
    0040D817 mov dword ptr [ebp-54h],4
    0040D81E mov dword ptr [ebp-50h],5
    0040D825 mov dword ptr [ebp-4Ch],6
    0040D82C mov dword ptr [ebp-48h],7
    0040D833 mov dword ptr [ebp-44h],8
    0040D83A mov dword ptr [ebp-40h],9
    0040D841 mov dword ptr [ebp-3Ch],0Ah
    0040D848 xor eax,eax
    0040D84A mov dword ptr [ebp-38h],eax
    0040D84D mov dword ptr [ebp-34h],eax
    11: }

    
    
                            
        4、省略长度                    
                            
        int arr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 

    8: int arr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    0040D7AE mov dword ptr [ebp-30h],1
    0040D7B5 mov dword ptr [ebp-2Ch],2
    0040D7BC mov dword ptr [ebp-28h],3
    0040D7C3 mov dword ptr [ebp-24h],4
    0040D7CA mov dword ptr [ebp-20h],5
    0040D7D1 mov dword ptr [ebp-1Ch],6
    0040D7D8 mov dword ptr [ebp-18h],7
    0040D7DF mov dword ptr [ebp-14h],8
    0040D7E6 mov dword ptr [ebp-10h],9
    0040D7ED mov dword ptr [ebp-0Ch],0Ah
    0040D7F4 mov dword ptr [ebp-8],0Bh
    0040D7FB mov dword ptr [ebp-4],0Ch

    int arr[3][4] = {1,2,3,4,5,6,7,8,9,10};     

    10: int arr2[3][4] = {1,2,3,4,5,6,7,8,9,10};
    0040D802 mov dword ptr [ebp-60h],1
    0040D809 mov dword ptr [ebp-5Ch],2
    0040D810 mov dword ptr [ebp-58h],3
    0040D817 mov dword ptr [ebp-54h],4
    0040D81E mov dword ptr [ebp-50h],5
    0040D825 mov dword ptr [ebp-4Ch],6
    0040D82C mov dword ptr [ebp-48h],7
    0040D833 mov dword ptr [ebp-44h],8
    0040D83A mov dword ptr [ebp-40h],9
    0040D841 mov dword ptr [ebp-3Ch],0Ah
    0040D848 xor eax,eax
    0040D84A mov dword ptr [ebp-38h],eax
    0040D84D mov dword ptr [ebp-34h],eax

    int arr[3][4] = {1,2,3,4,5,6,7,8,9}; 

    12: int arr3[3][4] = {1,2,3,4,5,6,7,8,9};
    0040D850 mov dword ptr [ebp-90h],1
    0040D85A mov dword ptr [ebp-8Ch],2
    0040D864 mov dword ptr [ebp-88h],3
    0040D86E mov dword ptr [ebp-84h],4
    0040D878 mov dword ptr [ebp-80h],5
    0040D87F mov dword ptr [ebp-7Ch],6
    0040D886 mov dword ptr [ebp-78h],7
    0040D88D mov dword ptr [ebp-74h],8
    0040D894 mov dword ptr [ebp-70h],9
    0040D89B xor ecx,ecx
    0040D89D mov dword ptr [ebp-6Ch],ecx
    0040D8A0 mov dword ptr [ebp-68h],ecx
    0040D8A3 mov dword ptr [ebp-64h],ecx

    
    
    5、为什么要使用二维数组:更加直观                        
                            
    比如:一年有12个月,每个月都有一个平均气温,存储5年的数据                        
                            
    int arr[5][12] = {                        
                        arr[1][5]    
        {1,2,1,4,5,6,7,8,9,1,2,3}            //0        
                            
        {1,2,1,4,5,6,7,8,9,1,2,3}            //1        
                            
        {1,2,1,4,5,6,7,8,9,1,2,3}            //2        
                            
        {1,2,1,4,5,6,7,8,9,1,2,3}            //3        
                            
        {1,2,1,4,5,6,7,8,9,1,2,3}            //4        
                            
    }                        

    数组越界:

      

    void HelloWord()            
    {            
        printf("Hello World");        
                
        getchar();        
    }            
    void Fun()            
    {            
        int arr[5] = {1,2,3,4,5};        
                
        arr[6] = (int)HelloWord;        
                
    }            

      总结:

      数组是允许越界的,arr[6]存的是函数的地址,也就是指针

  • 相关阅读:
    ajax基础
    Linux经常使用命令大全
    基于Proxy思想的Android插件框架
    linux date -d 的一些使用方法
    Mac电脑没有声音,苹果电脑没有声音怎么办
    通用PE u盘装Ghost Win7系统
    通用PE u盘启动盘制作
    Qt for iOS,Qt 与Objective C混合编程
    苹果开发工具:Xcode和Interface Builder
    IOS 使用Interface Builder开发界面入门与技巧
  • 原文地址:https://www.cnblogs.com/heyhx/p/14218399.html
Copyright © 2011-2022 走看看