美文网首页
C语言二维数组专题——理解二维数组名

C语言二维数组专题——理解二维数组名

作者: 胖一一 | 来源:发表于2019-02-26 21:55 被阅读0次

小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo
最近在研究二维数组,发现如果单独理解数组名的Array的含义,还真不太好理解。比如现在有一个二维数组:

int Array[2][2] = { {1, 2}, {3, 4} };

这个二维数组里包含了两个一维数组,分别是{1,2},{3,4},这个好理解,但是对于Array和Array + 1这两种写法,该怎么理解呢?这篇文章我就说说我自己的心得吧。

先上一段简单的代码:

#include <stdio.h>
//编译器名: TDM-GCC 4.9.2 32-bit Release
//运行平台:windows xp 32bit 

int main(void)
{
    int Array[2][2] = { {1, 2}, {3, 4} };

    printf("Array的值是%p, Array + 1的值是%p\n", (void *)Array, (void *)
        (Array + 1));
    printf("Array[0][0]的地址是%p, Array[1][0]的地址是%p\n", (void *)
        (&Array[0][0]), (void *)(&Array[1][0]));

    return 0;
}

运行结果如下:

image

从运行结果可以看到,Array的输出值是,Array + 1的输出值是,两者相差了8个字节。

1.理解二维数组名:Array

对于二维数组Array这个名字,一般的教材告诉我们,Array是第一个元素的地址。怎么来理解这句话呢?

如果从我们人脑的角度来理解Array,最形象的理解就是Array是一个大集合,它包含了4个数字:1、2、3、4。用一个图来表示,就像这样子:

image

但是电脑可不会像我们人脑来看待Array。从电脑自己的角度来看,它会看到Array标记的内存地址段里有两个一维数组,却看不到每个一维数组里的数字。用一个图来表示,就像这样子:

image

也就是说,电脑会认为Array的基本单位是一维数组,而不是一个个具体的数字,理解这个很重要。那么再回过头来看教材的这句话“二维数组名Array是第一个元素的地址”,现在电脑认为Array的元素是一维数组,那么第一个元素就是第一个一维数组{1,2},第一个元素的地址就是第一个一维数组{1,2}的地址。

同里,对于Array + 1,由于电脑认为Array的元素是一维数组,那么Array + 1就是第二个元素{3,4}的地址。千万不要认为Array + 1就跑到数字“2”去了。记住,电脑处理Array是按照一位数组为单位处理的,不是按照单个数字1、2、3、4来处理的,所以我说电脑认为Array的基本单位是一维数组这句话很重要。而且从运行结果来看,Array + 1的值与Array相差了8个字节,也说明了Array移动是以一维数组为单位移动的。

欢迎关注本人微博与微信:C语言编程技术分享

2.计算Array的值

第1点中,我说过Array是第一个元素的地址,而第一个元素是一个一维数组{1,2},那么Array的值就是{1,2}这个一维数组的地址。那么{1,2}的地址是多少呢?当然不是“1”的地址就是“2”的地址咯,你不会拿“2”的地址来作为一维数组{1,2}的地址吧?现在就恍然大悟了,一维数组{1,2}的地址就是首元素“1”的地址,那么Array的值也就是&Array[0][0]的地址啦,跟运行结果一样!

同里,Array + 1的值是第二个元素的地址,而第二个元素是一维数组{3,4},而一维数组{3,4}的地址是首元素“3”的地址,所以Array + 1的值就是&Array[0][0]。

3.总结

本文这是我对Array和Array + 1的意思的一点心得。文字描述没有教材上那么严谨,因为严谨了不利于理解抽象的概念。

关于二维数组还有一些写法,像Arrya[0],Array,Array[0]等等,这些写法又代表什么意思,待续!

相关文章

  • C语言二维数组专题——理解二维数组名

    小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo最近在研究二维数组,发现如果单独理解数组名的Arra...

  • 二维数组

    二维数组数组名

  • 第七章二维数组

    格式 格式2:数据类型[][] 数组名 = new 数据类型[m][]; 遍历二维数组 二维数组求和

  • 二维数组、传参

    二维数组和二维数组名:https://blog.csdn.net/erica_ou/article/details...

  • 从零学java笔录-第30篇 二维数组1二维数组格式&案

    本节内容: 1:二维数组概述和格式1的讲解 2:案例演示--输出二维数组名称、一维数组名称和一个元素 3:本节总结...

  • 5.24课程小结

    今天的c语言课程,主要讲述了两部分内容,第一部分讲述了指针与二维数组,要注意二维数组名字与地址的关系,注意指针符号...

  • day06

    1:二维数组(理解)(1)元素是一维数组的数组。(2)格式:A:数据类型[][] 数组名 = new 数据类型[m...

  • 10-19

    二维数组二维数组可以看成多个一维数组构成int arr【2】【3】2代表行号,3代标列数访问二维数组数组名+行下标...

  • C语言入门开发-二维数组

    认识二维数组 定义数据类型 数组名 [元素个数][元素数组中元素个数] int num[4][5]注意:二维...

  • 二维数组length属性

    二维数组的length属性与一维数组不同。一维数组表示数组的长度。在二维数组中:数组名.length指示数组的行数...

网友评论

      本文标题:C语言二维数组专题——理解二维数组名

      本文链接:https://www.haomeiwen.com/subject/igxtuqtx.html