c语言中什么是二维数组

说实话,第一次接触二维数组的时候我很困惑。
想象一下在 a[3 ][4 ] 中声明。
在C语言中,这实际上是在你的脑海中绘制一个3 行4 列的表格。
但计算机存储却没有。
像队列一样通过一条线连接起来。
因此有两种方式来考虑队列。

有趣的是,C 语言是按类组织的。
例如,您的 a[3 ][4 ] 将写入第一行和第二行。
专门针对您的示例;首先a[0][0] a[0][3 ];然后a[1 ][0]到a[1 ][3 ],最后a[2 ][0]到a[2 ][3 ]。
写论文时,就像先完成第一章,然后再完成第二章。
不要第一章读到一半就跳到第三章。

当时我不明白C语言为什么要这样设计,后来我意识到这可能和C语言的历史有关。
例如,在 2 0 世纪 8 0 年代初期,更多的计算机内存被顺序访问,类变得更加高效。
但无论你如何计划,记忆都是连续的。
每种类型的int占用2 个字节;所以a[0][0]占用字节0-1 ; a[0][1 ] 占用字节 2 -3 ,依此类推。

举个具体的例子或许可以帮助你理解。
例如,你用C语言编写一个程序;声明 int a[2 ][3 ] 后编译并运行它。
如果使用gdb或者valgrind查看内存如果使用的话你会看到第一个[2 ]维度对应于连续分配的内存块。
例如,地址从1 000开始; a[0][0] 为 1 000; a[0][1 ]为1 002 ; a[0][2 ]为1 004 ;那么a[1 ][0]就是1 006 ;等等。

我自己没有做过,但是在X8 6 架构下,我记得二维数组是主流的时候。
然而,许多高级语言,例如Python,现在使用列表来嵌套列表。
内部按列表的顺序存储,但外部不一定按行顺序存储。
所以当你学习C语言时,请记住二维数组是按行排列的,这在编写指针操作或手动内存管理时尤其重要。

C语言二维数组定义是什么,然后int a[1][2]是代表什么意思

inta[1 ][2 ] 定义一行两列。

inta={{1 ,2 }} 分配正确。

不要这样做:inta={1 ,3 }。

实用提醒:赋值时,尺寸要匹配。