类似的,三维数组,四维数组,都有适合使用它们的时候,理解方法也同二维数组相似。二维数组要是现实生活中,所有问题都这么简单就好了,那我只要利用C语言的一维数组,就能走遍天下都不怕了。二维数组的内存分配对于人类来说方便的,死板的计算机不一定也这么认为。

C语言二维数组,怎么理解?

C语言二维数组,怎么理解

相信题主应该明白 C 语言中基本数据类型的变量,例如定义一个 float 型变量:float a = 3.14;变量 a 能表示一个数值,但是现实生活中,仅仅使用一个单数值常常是不能完成任务的。更多情况下,需要解决的问题数据类型都是比较复杂的。一维数组小明班级有 40 名同学,现在考试成绩出来了,要求我们使用 C 语言把它们的成绩从高到低排出来。

要用 C 语言解决这个问题,首先要用 C 语言把 40 名同学的成绩表示出来。但是总不可能定义 40 个变量来存储各位同学的成绩吧?好在 C 语言提供了数组语法,我们定义一个 score 数组用于解决这个问题是非常合适的:float score[40];score 有 40 个元素,可以表示 40 个同学的成绩。

C 语言在内存中开辟一块连续的内存,供 score 使用,这块内存的大小等于 40*sizeof(float) 字节。二维数组要是现实生活中,所有问题都这么简单就好了,那我只要利用 C 语言的一维数组,就能走遍天下都不怕了。但是事与愿违,哪怕只是一个 9 宫格,一维数组已经不方便描述它了。难道要定义 3 个一维数组来描述这个 9 宫格?就算可以,要是这个表再大点呢?比如 1000行,1000列呢?更进一步的,要是希望我们使用 C 语言描述笛卡尔二维坐标系,使用一维数组岂不是麻烦死了?二维坐标系里的坐标怎样表示方便呢?数学中的表示方法就不错,横坐标为 a,纵坐标为 b 的点,写作(a, b)。

为了表述方便,使用 P 表示 9 宫格。如果在 P 中画上坐标轴,那每个格子描述起来就方便了,P(0,0) = 0, P(0,1) = 1,... 那要是 C 语言也能这么用,表示9宫格就太方便了,对不?实际上,还真可以。请看:float pos[9][9];pos[0][0]=0;pos[0][1]=1;几乎与用坐标描述一模一样,这可比用一维数组描述方便多了。

类似的,三维数组,四维数组,都有适合使用它们的时候,理解方法也同二维数组相似。二维数组的内存分配对于人类来说方便的,死板的计算机不一定也这么认为。实际上,C 语言希望“规则”越少越好,它不怕麻烦,就怕“灵活”。C语言对内存的分配方式,可不会随着人类认为的“维度”变化而变化。它就一种分配内存的方式,不管你是几维数组,分配内存统一按照线性划分。

对于 P[1][2],C语言会将其解释为 P[1*3 2]。计算机最恨的就是“动脑”了,能用一维解决,就绝对不用二维。而我们人类,最喜欢的就是,怎样方便怎样来。这也算是人与机器的区别吧。欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。


文章TAG:数组  二维  名称  
下一篇