一维数组

 对于一个一维数组a[10]来说

 它对储存空间的申请可以看成是这样的

 数组名a就代表着首元素a[0]的地址,也很容易看出a+5是元素a[5]的地址。

二维数组

 对于一个二维数组a[3][2]来说

 它对储存空间的申请可以看成是这样的

 可以很容易的知道a[0][1]便是它的一个元素,a[0]便是它的一个元素地址,a便是它的行地址。

 所以可以发现对于二维数组中的,a----a[0]-----a[0][1],它们是以行地址---元素地址---元素的值,这三个级别每有一个[]就降一个级别

 对于出现数据类型的判断便变得容易了,比如说:

    a 没有出现[],就便是最高级别行地址

    a[] 出现了一组[],便降低了一个级别变成了元素地址级别

    a[][] 出现了两组的[],便降低了两个级别变成了元素的值级别



 那么如在其后加上常数i变成了a+i,a[0]+i,a[0][1]+i呢?

 我们可以把它看为两个部分,一个是类型,一个是常数,

 对于a[0]+i来说,可以看成两个部分,一个是a[0],一个是+i,可以先判断a[0],我们可以知道它是一个元素地址,对于图表上来说就是a[0]这一格,再看常数i,

 它具有继承性,也便是对a[0]+i,因为a[0]是一个元素地址,所以加的这个i的单位也别是元素地址了,所以a[0]+i也便是a[0]向后移动i格的地址。

 那如果是a+i,这个i的单位也便是行地址了,所以a+i表示的是第i行的行地址。

同样的*也是这个效果。

ps

 其实我更喜欢这么理解一维数组的元素是单纯的元素,而二维的数组的元素就是一维数组,对于二维数组b[2][3]可以看成这样

 它是由两个一维数组b[0]和b[1]所组成。b[0]和b[1]中都有三个元素。

 因为数组名表示的是首元素的地址,所以b代表的是b[0](二维数组的元素是一维数组)这个数组的地址,也便是行地址,而b[0]可以看成一维数组的数组名,

 因为数组名是数组首元素的地址,所以b[0]便是名为"b[0]",的数组的首元素b[0][0](可以看成一个叫b[0]的一维数组)的地址,也别是元素地址了。

  其实三维数组也是这样的,可以试试。

论C语言数组的更多相关文章

  1. GO语言数组和切片实例详解

    本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...

  2. C语言 数组 列优先 实现

    C语言数组结构列优先顺序存储的实现 (GCC编译). 从行优先转换为列优先存储方式, 与行优先相比, 不同之处在于改变了数组维界基址的先后顺序, 从而改变了映像函数常量基址. /** * @brief ...

  3. C语言 数组 行优先 实现

    C语言数组结构行优先顺序存储的实现 (GCC编译). /** * @brief C语言 数组 行优先 实现 * @author wid * @date 2013-11-02 * * @note 若代码 ...

  4. 不可或缺 Windows Native (5) - C 语言: 数组

    [源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...

  5. C语言数组

    在C语言中,对于三维或三维以上数组的使用并没有很好的支持,而且使用率也非常的低,后面会对三维数组做一些简单的分析,这篇文章主要以二维数组来探讨一些C语言中数组使用的相关概念和技巧. 1 一个var[i ...

  6. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  7. Go语言数组的使用

    Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0 ...

  8. Go 语言数组

    Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0, number ...

  9. C语言 > 数组和指针

    C语言 数组和指针 const: 关于指针和const需要注意一些规则.首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的. 然而,只能把非const数据的地 ...

  10. Go语言数组和切片的原理

    目录 数组 创建 访问和赋值 切片 结构 初始化 访问 追加 拷贝 总结 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...

随机推荐

  1. conda pytorch 配置

    主要步骤: 0.安装anaconda3(基本没问题) 1.配置清华的源(基本没问题) 2.查看python版本,运行 python3 -V: 查看CUDA版本,运行 nvcc -V 3.如果想用最新版 ...

  2. Linux 查询 磁盘空间 系统报错:No space left on device

    报这个错误是磁盘空间不足导致的 使用   du -h -d 1 / | sort -nr 这个命令 一级一级排查

  3. Java流程控制之break、continue、goto

    break.continue break在任何循环语句的主体部分,均可用break控制循环的流程.break用于强行退出循环,不执行循环中剩余的语句.(break语句也在switch语句中使用) co ...

  4. Localstorage、sessionStorage、cookie 的区别

    共同点:都是保存在浏览器端.且同源的 区别: 1.cookie 数据始终在同源的 http 请求中携带(即使不需要),即 cookie 在浏览器和服务器 间来回传递,而 sessionStorage ...

  5. HDFS学习记录

    HDFS 1.hdfs整体工作机制: 1>hdfs:分布式文件系统. hdfs:分布式文件系统 hdfs有着文件系统共同的特征: 2>有目录结构,顶层目录是:  / 3>系统中存放的 ...

  6. 《Unix/Linux系统编程》第十三章学习笔记 20201209戴骏

    TCP/IP协议 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议 ...

  7. Linux基础第六章:逻辑卷的使用、扩容和磁盘配额

    一.逻辑卷的使用及扩容 1.概念优点及注意事项 2.使用命令及基本格式 3.创建逻辑卷 ①创建物理卷 ②创建卷组 ③创建逻辑卷 ④格式化.挂载yk26逻辑卷在/mnt下并在逻辑卷yk26下创建文件a. ...

  8. linux安装jdk脚本

    使用Shell远程给Linux安装JDK   #1.下载JDK(不同版本JDK更换链接即可) wget命令下载的文件会在当前目录下,所以如果在下载前最好先 cd 到想把JDK安装的位置,如果没有,可以 ...

  9. C# 调用https接口 安全证书问题 解决方法

    原文链接: https://blog.csdn.net/lizaijinsheng/article/details/127321758 说明: 如果是用https的话,由于没有证书,会报错:基础连接已 ...

  10. HTML复习(17.表格样式)

    重点 掌握caption-side(表格标题位置) 掌握border-collapse(表格边框合并) 掌握border-spacing(表格边框间距) 表格标题位置在CSS中,我们可以使用capti ...