一维数组

 对于一个一维数组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. Dynamics 365 CRM 弹窗 打开自定义页面 Xrm.Navigation.navigateTo Open Web Resource

    在CRM中经常需要打开自定义的HTML界面,而且打开这个界面的时候需要模态窗体,阻止用户填写除了弹窗之外的东西,只能先填写窗体的内容: 这个时候很多人喜欢选择第三方的library去实现模态窗体,但是 ...

  2. python pip 下载出问题解决方法(超时出错)

    问题如下, 百度了一下找到了解决方法 这样的原因是连接不到国外的安装源,在下载的代码行中手动输入国内安装源 例如: pip install itchat -i https://pypi.tuna.ts ...

  3. 关于 verilator 中 config.vlt 等配置文件的使用

    参考网页:https://verilator.org/guide/latest/exe_verilator.html#configuration-files 注意,在使用 config.vlt 配置文 ...

  4. Mysql数据库基础第二章:(五)分组查询

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  5. 【C学习笔记】【分享】day2-2 不允许创建临时变量,交换两个数的内容(附加题)

    加法实现: #include <stdio.h> int main() { int a = 30; int b = 20; a = a + b; b = a - b; a = a - b; ...

  6. Vue全局方法配置

    在Vue项目开发中,肯定会有这样一个场景:在不同的组件页面用到同样的方法,比如格式化时间,文件下载,对象深拷贝,返回数据类型,复制文本等等.这时候我们就需要把常用函数抽离出来,提供给全局使用.那如何才 ...

  7. k8s排错(Unhealthy)

      1,组件 Unhealthy 通过kubeadm安装好kubernetes v1.18.6 查看集群状态,发现组件controller-manager 和scheduler状态 Unhealthy

  8. centos删除安装vsftpd

    准备工作 1.centos 卸载vsftpd 删除原有的vsftpd(卸载前先关闭 vsftpd: systemctl stop vsftpd)[root@localhost ~]# rpm -aq ...

  9. LoadRunner 常见错误

    1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决. 启动浏览器,打开Inter ...

  10. 配置windows server多个用户同时使用一个账户远程服务器

    首先,需要服务器开启远程桌面连接: 右键点击"这台电脑"弹出菜单栏,选择"属性"   弹出系统窗口,点击"远程设置"   弹出系统属性窗口, ...