• 二维数组


    二维数组
    1、二维数组的内存映像
    (1)一维数组在内存中是连续分布的多个内存单元组成的,而二维数组在内存中也是连续分布的,由多个内存单元组成。
    (2)从内存角度来看,一维数组和二维数组没有本质差别。
    (3)二维数组int a[2][5]和一维数组int b[10]其实没有本质差别。我们可以把两者的同一单元的对应关系写下来。
    a[0][0]    a[0][1]    a[0][4]     a[1][1]     a[1][4]
    b[0]       b[1]       b[5]        b[6]        b[9]
    (4)既然二维数组都可以用一维数组来表示,那么二维数组存在的意义和价值在哪里?
    二维数组和一维数组在内存使用效率、访问效率上是完全一样的。在某种情况下使用二维数组而不使用一维数组的原因在
    于二维数组好理解、代码好写、利于组织。
    (5)总结:我们使用二维数组(C语言也提供二维数组),并不是必须,而是一种简化编程的方式。其实一维数组的出现
    其实也不是必然的,也是为了简化编程。
    2、哪个是第一维,哪个是第二维?
    (1)二维数组int a[2][5]中,2是第一维,5是第二维。
    (2)结合内存映像来理解二维数组的的第一维和第二维的意义。首先第一维是最外边一层的数组,所以int [2][5]这个数
    组有两个元素;其中每一个元素又是一个含有5个元素的数组(这个数组是第二维)。
    (3)总结:二维数组的第一维是最外部的那一层,第一维本身是个数组,这个数组存储的元素也是一个数组;二维数组的
    第二维是里边的那一层,第二维本身是个数组,这个数组中存的元素是普通元素,第二维这个数组本身作为元素存储在第一
    维的数组中。
    3、二维数组的下标式访问和指针式访问
    (1)一维数组的两种访问方式:以int b[10]为例,int *p = b;
    b[0]等同于*(p + 0);   b[9]等同于*(p + 9);   b[i]等同于*(p + i);
    (2)二维数组的两种访问方式:以int [2][5]为例,(合适类型的)p = a;
    a[0][0]等同于*(*(p + 0) + 0);   a[i][j]等同于*(*(p + i) + j);
    4、二维数组的定义方式
    第一种:int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};
    第二种:int a[2][5] = {1,2,3,4,5,6,7,8,9,10};
    int *p = a;//编译器会报错的,因为类型不匹配

  • 相关阅读:
    PKU JudgeOnline 题目分类
    调试时拼凑带端口的完整网址/域名
    智能电脑监控器,完美解决想监控别人在自己电脑上的一切操作。
    如何清理LDF文件
    使用母版页后FindConttol需要注意
    【外刊IT评论】代码覆盖率:80%,不能少
    推荐2本普通人参悟的书
    处理在母版页加AJAX环境下处理滚动条回发保持不动的问题
    虚拟目录中的web.config不被上级目录的web.config影响的处理
    C++中^符号的意思
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/11393236.html
Copyright © 2020-2023  润新知