论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 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...
随机推荐
- 整合jUnit4和jUnit5
整合jUnit4 1.引入依赖 <dependency> <groupId>org.springframework</groupId> <artifactId ...
- Adversarial seeded sequence growing for weakly-supervised temporal action localization概述
0.前言 相关资料: 论文 github 论文解读 论文基本信息: 领域:弱监督时序动作定位综述 更新时间:ACM MM2019(2019.8.7) 1.针对的问题 大多数现有的框架依赖于类激活序列( ...
- Qt中QGraphicsScene和QraphicsView显示坐标问题解决
相信打开这个界面的你,一定遇到了这两玩意儿设置完坐标发现对不上的问题...查询Qt官方文档后发现: 网上搜索了一番,基本上这个坐标系就是长酱紫: 所以加上这行代码就行了: ui->graphic ...
- laravel 插件库网站
1.https://packagist.org 2.http://packalyst.com
- holiday05
第五天 cat cat会一次性显示所有的内容,适合查看 内容较少 的文本文件 选项 含义 -b 对非空输出行编号 -n 对输出的所有行编号 more more每次只显示一页内容,适合于查看 内容较多 ...
- Spring boot jar包解压后重新压缩命令
进入解压的目录/demo,运行 jar cvfM0 demo.jar * 压缩后的项目即可运行 参考:https://www.cnblogs.com/liyanbin/p/6088458.html
- 合并B站video.m4s和audio.m4s
ffmpeg -i D:\a\video.m4s -i D:\a\audio.m4s -codec copy D:\a\a.mp4
- Qt实现collapsePanel(折叠)功能
实践过程中,看到C#实现的CollapsePanel功能,比一般的TabWidget更加直观,充分利用了页面空间,遂感到很有兴趣,也查阅了很多资料搜索Qt在这方面的实现. 目前来说,比较常见的作法就是 ...
- 杭电OJ--1014
问题描述: 计算机模拟通常需要随机数.生成伪随机数的一种方法是通过窗体的函数seed(x+1) = [种子 (x) + STEP]% MOD其中 "%" 是模量运算符.这样的函数将 ...
- 获取指定字符串第n次出现的位置索引
returnIndex(str,cha,num){ var x=str.indexOf(cha); for(var i=0;i<num;i++){ x=str.indexOf(cha,x+1); ...