1
1
在您的代码片段中
线路
相当于:
这意味着您正在访问对象
您可能想做的事情如下:
另一种写法是这样的:
这些程序在我的编译器上有以下输出:
尽管这可能适用于所有编译器,但值得注意的是,这样做可能会调用未定义的行为,这取决于您对标准的解释有多严格。这是因为您正在访问第一个子数组
One-dimensional access to a multidimensional array: is it well-defined behaviour?
编译器gcc和clang实际上都为第二个程序提供了运行时警告,如果我使用
出于这些原因,如果您想将1D阵列用作2D阵列,那么最好声明1D阵列而不是2D阵列,并自己对1D阵列执行索引计算。这样,你就可以确保你所做的是ISO C标准允许的。以下是一个示例:
该程序具有以下输出:
数组
在您的问题中,地址如下:
在你的问题中,行
具有以下输出:
最后两个地址越界,因为子数组
如果
然而,我怀疑这些地址实际上是正确的,因为你用错了
|
2
1
https://godbolt.org/z/3avvnssn5 后果
|
3
0
让我们“绘制”您的阵列: +---------+---------+---------+---------+ | a[0][0] | a[0][1] | a[1][0] | a[1][1] | +---------+---------+---------+---------+ 从中很容易看出一种模式正在出现,它告诉我们可以使用单个数组来表示所有两个“维度”: +---------+---------+---------+---------+ | a[0] | a[1] | a[2] | a[3] | +---------+---------+---------+---------+ 现在我们所要做的就是想出一个公式来计算矩阵x,y对的一个数组索引。 在第一个“行”中,我们通过简单地使用列索引来获得索引。对于第二个“行”,我们需要添加“列”的数量。
所以一般的计算是
我把它编码成这样:
|
joe souaid · 用姓名填写二维列表 2 年前 |
cng · 如何在嵌套数组中查找值,然后将值从布尔值更改为字符串? 2 年前 |
Zoey · 向Java数组中添加多个内容 2 年前 |
Zoey · 使用5x5数组创建Java递增字母表网格 2 年前 |
amirMD · 如何在所有数组的开头和结尾添加零 2 年前 |
Joseph · 如何移动二维阵列中的空白空间? 2 年前 |