zoukankan      html  css  js  c++  java
  • 指针引用多维数组

    2017年12月17日15:58:41
    题目:定义一个int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}的二维数组


    1.含义:数组有3行4列
    a[0]=== 1    3    5       7
    a[1]=== 9   11   13    15
    a[2]=== 17 19    21    23
    二维数组a[3][4]是由3个一维数组组成的。
    即:a代表a[0]行的首地址。a+1代表a[1]的首地址
    如果二维数组首地址为2000,则a+1代表 2000+4*4=2016(因为0行有4个整形数据)
    -->a+1=a[1](a+1是a[1]的首地址);a[0]->&a[0][0];a[1]->&a[1][0];a[2]=&a[2][0]


    2.思考a数组0行1列元素的地址怎么表示呢?
    a[0]+1(1代表一个元素的字节数,即4个字节)如果a[0]地址为2000,a[0]+1=2004->&a[0][1]
    即:a[0]+0       a[0]+1    a[0]+2      a[0]+3
      &a[0][0]     &a[0][1] &a[0][2]   &a[0][3]


    3.细节汇总
    前面已经知道:a[0]=*(a+0);a[1]=*(a+1),a[i] = *(a+i)
    所以:a[0]+1=*(a+0)+1=a[0][1],同理:*(*(a+0)+1)=*(*(a+1))=a[0][1]
    即:*(a[i]+j)=*(*(a+i)+j)=a[i][j].
    务必记住:*(a+i)和a[i]是等价的

    4.分析a[i]的性质
    a[i]从形式上面来看是a数组中序号为i的元素。
    如果a是一维数组名,则a[i]代表a数组序号为i的元素的存储单元。
    如果a是一个二维数组,则a[i]是一维数组名,它是一个地址。
    eg:a,a+i,a[i]、*(a+i)、*(a+i)+j、a[i]+j都是地址。
    而:*(a[i]+j)、 *(*(a+i)+j)是二维数组元素a[i][j]的值


    5.表现形式
    a                                      二维数组名,指向一维数组a[0],即0行的首地址      2000
    a[0], *(a+0), *a                  0行0列元素的地址                    2000
    a+1, &a[1]                  1行元素地址                                                                       2016
    a[1], *(a+1)                   1行0列元素a[1][0]的地址                    2016
    a[1]+2, *(a+1)+2, &a[1][2]        1行2列元素a[1][2]的地址                   2024
    *(a[1]+2), *(*(a+1)+2), a[1][2]     1行2列元素a[1][2]的值                                                        元素值:13

    注意:*(a+1)并不是a+1单元的内容(值),因为a+1并不是一个存储单元
    *(a+1)=a[1],而a[1]是一维数组名,所以是地址。

  • 相关阅读:
    java读取ldif文件并创建新的节点
    AngularJS的基本概念和用法
    前端开发环境需要的工具
    解决:使用ajax验证登录信息返回前端页面时,当前整个页面刷新。
    js中switch语句不执行
    使用html5中required属性
    H-ui.admin v3.1学习之路(一):导航栏信息无法在内容区显示
    解决:@Auarowired为null
    scrapy框架整理
    django项目的部署
  • 原文地址:https://www.cnblogs.com/healy/p/8053159.html
Copyright © 2011-2022 走看看