理解C语言二维数组名

理解C语言二维数组名C 语言二维数组名 是不是有点难于理解 本文给出结合作者的一些想法 希望对你有帮助

最近在研究二维数组,发现如果单独理解数组名的Array的含义,还真不太好理解。比如现在有一个二维数组:

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

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

先上一段简单的代码:

#include       //编译器名: 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; }   

运行结果如下:

理解C语言二维数组名


1.理解二维数组名:Array

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

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

理解C语言二维数组名

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


理解C语言二维数组名


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

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语言教学微博:http://weibo.com/520JDH









版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216802.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:01
下一篇 2026年3月18日 上午11:02


相关推荐

  • openClaw安装飞书插件|核心踩坑:spawn EINVAL 错误终极解决指南

    openClaw安装飞书插件|核心踩坑:spawn EINVAL 错误终极解决指南

    2026年3月13日
    3
  • java学生信息管理系统(附源码)

    java学生信息管理系统(附源码)一:介绍1:实现登录界面2:实现主界面有两种操作一种是按钮操作另外一种是SQL语句。3:连接SQLserver2008数据库,后续我更新了,加了一个MySql版本。在我的下载链接里面都有,里面也有使用说明。另外*myeclipse和eclipse,jcreator什么的都是IDE,…

    2022年5月22日
    39
  • matlab画图操作(修改坐标轴及字体,加粗,颜色修改,适合论文画图)「建议收藏」

    matlab画图操作(修改坐标轴及字体,加粗,颜色修改,适合论文画图)「建议收藏」matlab常用画图操作1.设置坐标轴2.设置figure大小3.matlab线条设置4.子图设置5.颜色查询6.colorbar设置7.线条透明度设置8.设置坐标轴刻度形式9.图例设置1.设置坐标轴%设置坐标轴格式title(‘Title’,’fontsize’,12,’fontname’,’Times’);xlabel(‘Times(s)’,’fontsize’,12,’fontname’,’Times’)ylabel(‘Value’,’fontsize’,12,’fontname’,’Tim

    2026年2月2日
    6
  • 计算机组成原理————寄存器寻址方式大总结

    计算机组成原理————寄存器寻址方式大总结常见的寻址方式有立即寻址 直接寻址 间接寻址 寄存器寻址 寄存器间接寻址 相对寻址和变址寻址等 在立即寻址方式中 操作数包含在指令中 在直接寻址方式中 操作数存放在内存单元中 在寄存器寻址方式中 操作数存放在某一寄存器中 在间接寻址方式中 指令中给出了操作数地址的地址 在相对寻址方式中 在指令地址码部分给出一个偏移量 可正可负 在变址寻址方式中 操作数地址等于变址寄存器的内容加偏移量

    2026年3月16日
    3
  • PLC编程基础[通俗易懂]

    PLC编程基础[通俗易懂]1.开始一个新的工程按照以下步骤来建立一个新的工程:  (1)选择工具栏中的新建按钮。      (2)定义工程的设备条目。  (3)保存工程当一个新的PLC被添加到工程中的时候,将创建以下空表:1)空的本地符号表;2)全局符号表;3)IO表;4)PLC内存数据;5)PLC设置数据。2.编写一个梯形图程序下面以一个交通灯次序控制为例说明,该交通灯次序是一个标准的英国交通灯次序,顺序如下:只有红灯→…

    2025年10月5日
    4
  • 60行C代码实现一个shell

    60行C代码实现一个shell继 300 来行代码带你实现一个能跑的最小 Linux 文件系统之后 我们来看看如何 60 行 C 代码实现一个 shell 在实现它之前 先看看这样做的意义 美是有目共睹的 Unix

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号