日映岚光青锁翠———二维数组

原创 2018年04月17日 14:03:11

我们知道二维数组一般是这样定义的:

int arr[3][4] = {{1,2,3,4},{5,6,7,8,},{9,10,11,12}};

当然也可以这样定义

int arr[][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}}

int arr[][4] ={1,2,3,4,5,6,7,8,9,10,11,12}

我们可以省略行号不写,因为系统可以根据每行的元素的个数,来判断总共有多少行。(注意:我们可以省略第一维的长度,但第二维的长度一定要指定,arr[3][]arr[][]这两种都是错误的。)

这个数组打印出来的是三行四列的形式,如:

1 2  3  4

5 6  7  8

9 10 11 12

为了方便接下来的解释,我们把它写成下图的样子:

我们可以把二维数组当成特殊的一维数组来看,如下图:

我们把二维数组arr当做是由三个一维数组组成的,每个一维数组的长度为4,如:arr[1][2],arr[1]当做一维数组名来看待,那么arr[1][2]的意思就是一维数组arr[1]中的第三个元素,也就是7

若是还不明白,我们从中单独摘出一行来看:


现在把有关二维数组的关系剔除,我们就看这一行,再给它起个新名字叫 brr

brr 是个一维数组,我们就可以这样定义它:

int brr[4] = {5,6,7,8};

所以

brr[0] = 5

brr[1] = 6

brr[2] = 7

brr[3] = 8

现在再回过头来看,因为brr = arr[1];现在替换一下

那么 arr[1][2] = 7 顺理成章。

也就是说,二维数组的每一行我们都可看作一个一维数组,则二维数组arr由三个一维数组组成:arr[0]arr[1]arr[2]

既然这是三个一维数组,其数组名所指向的就是其首元素的地址。

arr[0] 的首元素是1,在二维数组中的位置是00列,

所以 arr[0] 代表 00列元素的地址。

arr[1] 的首元素是5,在二维数组中的位置是10列,

所以 arr[1] 代表 10列元素的地址。

arr[2] 的首元素是9,在二维数组中的位置是20列,

所以 arr[2] 代表 20列元素的地址。

接下来,进入下一个问题,二维数组的数组名代表着什么?

我们知道,一维数组的数组名代表的是其首元素的地址,那么我们推测二维数组的数组名也代表着其首元素的地址?这样的推测是绝对没错的,但是现在二维数组的首元素不是单纯的的一个整型元素了,而是由四个整型元素所组成的一维数组。也就是说:二维数组名代表的是首行的首地址。

 

既然 arr 0行的首地址,那么arr+1就代表着1行的首地址,同理arr+2 代表的是 2行的首地址。

以下的这个程序虽然输出的值都是相同的,但却有着各自的含义,需要读者仔细琢磨其概念。


int main()
{
	int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

	printf("%d\n",arr[1]);       //1行0列元素地址
	printf("%d\n",&arr[1]);      //1行首地址
	printf("%d\n",&arr[1][0]);   //1行0列元素地址
	printf("%d\n",arr+1);        //1行首地址
	printf("%d\n",*(arr+1));     //1行0列元素地址,arr[1]等价于*(arr+1)
    printf("%d\n",&*(arr+1));    //1行首地址                   
	return 0;
}
个人言辞匮乏,难免有词不达意之处,若还不理解,请参考 谭浩强《C程序设计(第四版)》245~248页。

2016年11月12日软考网络工程师下午真题解析

2016年11月12日,软考网络工程师考试已经落下帷幕。经统计发现,考生记忆考题答案一般在考后几周之内是记忆答案最准确的阶段。所以,我第一时间给大家发布了2016年下半年软考网络工程师这门考试的真题解析,以助大家在最好的记忆阶段对本次考试情况做一个准确的评估。同时也为未来参加网络工程师考试的学员展现网络工程师最新的考题形式,考察要点,助其有重点的复习软考网络工程师这门考试。
  • 2016年11月18日 12:42

日经春秋 20150506

いつのまにか立夏である。気がつくと新緑の中にいる。芽吹いた木々が日に日に葉を広げて、領土を拡張していく。柔らかな新樹の茂りがパソコンで疲れた目に優しい。長旅に疲れた芭蕉(ばしょう)の目も、すがすがしい...
  • tomotayuki
  • tomotayuki
  • 2015-05-06 08:50:01
  • 160

食素!映翠掩绿别样红

很享受吃新鲜素菜的感觉。如今的都市女人们大都会这样讲。身材呢,需要在健康的前提下苗条,饮食呢,也要在健康的前提下美味才对!映翠掩绿别样红,色靓味浓材料就是这样的素:芹菜1棵青蒜苗5棵胡萝卜1/2根调味...
  • colayungnew
  • colayungnew
  • 2005-01-02 17:20:00
  • 1131

基于JavaEE平台实战WebService框架Xfire+Ajax框架DWR视频教程

分享一套夜青岚老师的《 基于JavaEE平台实战WebService框架Xfire+Ajax框架DWR(租房网项目实战)》视频教程。 课程内容简介      本部分课程包含两块内容: ...
  • u011552756
  • u011552756
  • 2014-01-22 13:40:29
  • 846

【产品评测】RPLIDAR A2 在WIN下测试

有幸通过Arduino中文社区参加思岚雷达RPLIDAR A2的测评活动,思岚雷达可以说的算是性价比最高的了。其运用光磁融合技术,专门了解一下,这个光磁融合还是很有讲究的。 由于雷达要连续转360度...
  • SLAMTEC
  • SLAMTEC
  • 2016-12-30 11:18:13
  • 972

(蒼ざめた月の光)苍青色的月光(moonlight) 结局点评和附加剧情开启

堕落了,居然下载18禁的GalGame之前这类游戏只玩过《苍青色的月光》,而且剧情人物什么的完全没有印象了,这次很凑巧,发现这个游戏被汉化,于是下苍青色的月光中日双语版来玩,一般来说,这样被汉化的游戏...
  • luozhuang
  • luozhuang
  • 2008-02-12 10:40:00
  • 4915

【算法】 人脸识别点滴记录

1. 抱怨 从偶尔看到的文章中摘录一些内容,记录下来,同时以后可以很方便的查找到---最有效的方法是什么呢?头痛 2. FERET与FRVT实验 下面网上流行的两篇文章,有的事实有出入啊 还有个F...
  • windtalkersm
  • windtalkersm
  • 2014-01-29 20:17:08
  • 2469

思岚科技a1雷达sdk linux下的cmake 工程搭建

本文记录思岚科技a1雷达SDK在linux下cmake 工程搭建的过程描述 slamtec的激光雷达SDK提供了linux支持,在目录下都有Makefile,直接在主目录下执行make,将会生成一个...
  • LFTUUI
  • LFTUUI
  • 2017-02-14 21:50:45
  • 732

维翠视频编辑器VidTrim-Pro_v2_0

  • 2015年01月22日 21:53
  • 8.87MB
  • 下载

Trio翠欧MC464文档

  • 2012年02月28日 11:34
  • 42.19MB
  • 下载
收藏助手
不良信息举报
您举报文章:日映岚光青锁翠———二维数组
举报原因:
原因补充:

(最多只允许输入30个字)