论C语言数组
一维数组
对于一个一维数组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语言数组的更多相关文章
- GO语言数组和切片实例详解
本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...
- C语言 数组 列优先 实现
C语言数组结构列优先顺序存储的实现 (GCC编译). 从行优先转换为列优先存储方式, 与行优先相比, 不同之处在于改变了数组维界基址的先后顺序, 从而改变了映像函数常量基址. /** * @brief ...
- C语言 数组 行优先 实现
C语言数组结构行优先顺序存储的实现 (GCC编译). /** * @brief C语言 数组 行优先 实现 * @author wid * @date 2013-11-02 * * @note 若代码 ...
- 不可或缺 Windows Native (5) - C 语言: 数组
[源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...
- C语言数组
在C语言中,对于三维或三维以上数组的使用并没有很好的支持,而且使用率也非常的低,后面会对三维数组做一些简单的分析,这篇文章主要以二维数组来探讨一些C语言中数组使用的相关概念和技巧. 1 一个var[i ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- Go语言数组的使用
Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0 ...
- Go 语言数组
Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0, number ...
- C语言 > 数组和指针
C语言 数组和指针 const: 关于指针和const需要注意一些规则.首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的. 然而,只能把非const数据的地 ...
- Go语言数组和切片的原理
目录 数组 创建 访问和赋值 切片 结构 初始化 访问 追加 拷贝 总结 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...
随机推荐
- Dynamics 365 incident原生实体特点
有以下特点: customerid字段必填,而且该字段类型是"客户".可以关联多种数据类型. 更新服务用户的姓名,会更新所有关联SR的customeridName. 关闭SR会产生 ...
- vue 使用 swiper vue-awesome-swiper
文档地址 https://github.com/surmon-china/vue-awesome-swiper 演示地址 https://v1.github.surmon.me/vue-awesome ...
- 移动端性能测试--CPU资源
一.背景 在很多场景下我们去使用 App,可能会碰到手机会出现发热发烫的现象.这是因为 CPU 使用率过高.CPU 过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起 ...
- Java流程控制之while循环详解
while循环 while循环 do...while循环 for循环 在Java5中引入了一种主要用于数组的增强型for循环 while循环 while循环是最基本的循环,它的结构为 while(布尔 ...
- Vue.Draggable使用总结
Draggable为基于Sortable.js的vue组件,用以实现拖拽功能. 特性 支持触摸设备 支持拖拽和选择文本 支持智能滚动 支持不同列表之间的拖拽 不以jQuery为基础 和视图模型同步刷新 ...
- CImage类使用
前言 CImage类是基于GDI+的,但是这里为什么要讲归于GDI? 主要是基于这样的考虑: 在GDI+环境中,我们可以直接使用GDI+ ,没多少必要再使用CImage类 但是,如果 ...
- JS篇(010)-JavaScript 继承的方式和优缺点
答案:六种方式 一.原型链继承 缺点: 引用类型的属性被所有实例共享 在创建 Child 的实例时,不能向 Parent 传参 二.借用构造函数(经典继承) 优点: 避免了引用类型的属性被所有实例共享 ...
- C++ OnlineJudge
基本输入输出 1.接收多行数据,直到文件末尾 1 #include <iostream> 2 //#include <bits/stdc++.h> 3 #include < ...
- 应用Sequelize创建项目
创建项目: 第一步:安装express-generator -g 第二步:安装ejs模板 express --view=ejs 项目名 第三步:安装依赖进入项目 npm i ------------ ...
- mybatis lombok 报错: java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor
1. 报错原因:jdk版本太高,lombok版本太低 2. 解决办法:安装更高版本的依赖包,可以去Maven Repository: lombok去查:https://mvnrepository.co ...