zoukankan      html  css  js  c++  java
  • 指针和二维数组的关系要点简单分析

    现有二维数组 int a[2][3] = {1,2,3,4,5,6}; 现在想要声明一个指针指向二维数组,该怎么声明呢?

    首先,指针保存的是一个地址,并且这个地址是带有类型的地址。其次,声明的指针要指向谁呢?

    1.指向 a.即:指向二维数组的首元素地址。因为二维数组本质上是一个一维数组。

         a .可以这样理解:int a[2][3]  这个二维数组包含2个元素,a[0],a[1]   而a[0]又是一个一维数组包含的元素为{1,2,3}.

        还可以这样理解:int a[2][3]  这个二维数组包含2个元素,a[0],a[1] 可以看做是外层一维数组的两个元素,a可以看做外层一维数组的数组名。

        而a[0]又是一个一维数组包含的元素为{1,2,3}可以看做是里层一维数组,a[0]可以看做里层一维数组{1,2,3}的数组名,a[1]可以看做里层一维数组{4,5,6}的数组名

      b.a[0] 它的数据类型是什么样的呢? 因为a[0] 包含{1,2,3} 这3个元素,而每个元素都是int类型,那么a[0] 的类型为:int[3] 类型.

      c.有了以上的理解作为基础。那么指向a,即:指向二维数组的首元素 a[0] ,而首元素又是一个数组,所以应该声明一个指向数组的指针 :int (*p)[3];

    2,指向二维数组中,里层一维数组的元素。

     a.a代表外层一维数组{a[0],a[1]}首元素的地址。即:a[0]的地址:&a[0].

     b.a[0]代表里层一维数组{1,2,3}首元素的地址。即:元素 1 的地址:&a[0][0]。

     c.由以上两点可以看出:1.对a[0]进行 & 操作 就变成外层一维数组的首元素地址了(&a[0]),即:升级维度了,变成二维的了。

                2.对&a[0]进行 * 操作就变成里层一维数组的首元素地址了(a[0]),即:降低维度了。变成一维数组了。

     d.既然指向 a 需要 声明 int(*p)[3];这样的数组指针,p = a;  也就是p = &a[0](二维数组首元素地址)  那么*p = a[0] (降低维度变成一维,即:一维数组首元素地址),**p = 1(继续降低维度       变成0维度,即:没有维度,就是元素本身了)。

  • 相关阅读:
    Python3.x:定义一个类并且调用
    Spring编码过滤器:解决中文乱码
    Web.xml中自动扫描Spring的配置文件及resource时classpath*:与classpath:的区别
    你是否属于中等收入群体
    Python3.x:BeautifulSoup()解析网页内容出现乱码
    Activiti工作流引擎数据库表结构
    Java:出现错误提示(java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date)
    Django框架搭建(windows系统)
    Eclipse配置多个jdk
    Activiti:创建activiti工程
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9499823.html
Copyright © 2011-2022 走看看