zoukankan      html  css  js  c++  java
  • 多维数组分析

    1、二维数组的初始化 
    int arr[3][4] = {                
        {1,2,3,4},            
        {5,6,7,8},            
        {9,7,6,5}            
    }  
    编译器如何分配空间:
    int arr[3*4] = {1,2,3,4,5,6,7,8,9,7,6,5};
    反汇编:
        二维数组反汇编和一位数组没有区别,都是一段连续的内存空间;
        编译器将维度相乘来获得需要分配的内存空间大小;
        总之二维数组只是为了实现程序员看代码更加直观的功能;
     
    2、给定部分值        
    如果只给定部分值,其它值会在编译时补0;        
    int arr[3][4] = {        
        {1,2},    
        {5},    
        {9}    
    }  
     int arr[3][4] = {        
        {1,2,3,4,5},    
        {5},    
        {9}    
    }  
     
    3、省略里面的{ }                                        
    int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};                                        
    int arr[3][4] = {1,2,3,4,5,6,7,8,9,10};  
    因为编译时二维数组和一位数组没有本质的区别,所以省略里面的大括号是可以通过编译的;
    如果只给定部分值,剩下的值会补0;
     
    4、省略长度                
    二维数组的第一个长度可以省略 ,编译时会根据第二个长度自动分组,不足一组的补0;   
    例如:下面的数组会分成3组,因为编译器直到每组有4个元素,会从前往后自动分成3组;
    int arr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};  
    分成三组,最后一组补两个0:
    int arr[][4] = {1,2,3,4,5,6,7,8,9,10};     
    分两组:
    int arr[][4] = {1,2,3,4,5,6,7,8};  
     
    注意:这样是错误的    ->int arr[3][];
    如果是这样,编译器只直到分成3组,而每组的元素个数无法确定,不好判断是否该补0之类的;  
     
    5.总结
        1、一维数组与多维数组在反汇编上没有区别.                
        2、数量如果不够,其他的值会补零.                
        3、不允许超过维度的最大长度.                
        4、可以省略里面的{ }                
        5、可以省略第一维的值    
     
    6.寻找多维数组中的数据
    例如:二位数组int[5][12];
    编译器寻找arr[1][7]的值时:
        ->arr[1*12+7]
     
    如果是数组:int arr[n][m][k][w][r]    
    寻找:arr[2][3][4][2][2]
        ->arr[2*m*k*w*r+3*k*w*r+4*w*r+2*r+2]
     
     
  • 相关阅读:
    2020年12月18日
    2020年12月17日
    2020年12月16日
    2020年12月15日
    2020年12月14日
    排序算法总结
    2020微软笔试题
    子串、子序列问题
    剑指offer题解(完结)
    ONOS 2.2安装
  • 原文地址:https://www.cnblogs.com/ShiningArmor/p/11571147.html
Copyright © 2011-2022 走看看