【问题标题】:Explain the output of the program in detail which uses 3D arrays?详细解释使用 3D 数组的程序的输出?
【发布时间】:2014-09-03 10:25:01
【问题描述】:

告诉我“3 6 1”下面的代码输出是如何生成的?

int main()
{

int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};

printf("%d %d %d",a[1]-a[0],a[1][0]-a[0][0],a[1][0][0]-a[0][0][0]);

return 0;
}

我不知道如何仅使用 a[1] 或 a[0] 访问元素以进行减法运算。因为它是一个 3D 数组,所以应该像 [0][1][2] 一样访问它。谢谢。

【问题讨论】:

  • 我需要它,伙计。我正在为入学考试自学,这是我唯一可以找到难题答案的地方。
  • 给你所有的输入元素一个唯一的值,看看每种类型的操作符做了什么(即使用一维或二维访问器访问什么元素。)。这样你就可以了解它是如何工作的。不要指望我们会给你免费的考试通行证,只是实验和学习。如果你做不到,那么编程不适合你。
  • 另外,尝试打印a[1]a[0] 的值,看看它们的值是多少。您可能会得到提示。
  • 我试图获取 a[0] 和 a[1] 的单独值,但它们每次都在变化!无法获得价值来自哪里!与输入相比,这些值非常大。
  • @WittyGeek79:它们非常大,因为它们是内存地址。重要的是它们之间的区别。减去它们以了解子数组或变量之间的距离。

标签: c++ multidimensional-array


【解决方案1】:

你可以像这样想象它:

a[0] 和 a[1] = 3 个元素乘以 2 个 int(二维数组)(每个元素的大小 = 2 * int)

a[0][0] 和 a[1][0] = 2 个 int 元素(size = int)

a[0][0][0] 和 a[1][0][0] = real int 值,所以它们可以相减 (2 - 1 = 1)

如果编译器不能直接减去值,那么他“减去结构” i。 e. a[1] - a[0] = ((a[1] 的开始) - (a[0] 的开始)) / sizeof(a[0] 的元素) = (6 * int) / (2 * int ) = 3

在 a[1][0] 和 a[0][0] 之间分配了 6 个 int,所以 a[1][0] - a[0][0] = ((begin of a[1][0] ]) - (a[0][0])) / sizeof(a[0][0] 的元素) = (6 * int) / (1 * int) = 6

一些建议:

1) 使用调试器和反汇编器!我只是看一下 asm 代码,看看它是如何计算的。

2) 忘记在元素之间获取元素数量的不清楚的方式!这是非常糟糕的做法,只是为了愚蠢的考试知识。

P。 S. 抱歉英语不好.. 我尝试写正确,但可能在某处出错。

【讨论】:

  • 我明白你在说什么@Green_Wizard。谢谢。附言你的英语没那么差。 :)
猜你喜欢
  • 2019-09-08
  • 2012-09-05
  • 2023-03-12
  • 2021-09-03
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
相关资源
最近更新 更多