📜  门| GATE-CS-2014-(Set-2) |第 44 题

📅  最后修改于: 2021-09-25 04:15:19             🧑  作者: Mango

对于访问 X[i][j][k] 的 C 程序,以下中间代码由编译器生成。假设整数的大小为 32 位,字符的大小为 8 位。

t0 = i ∗ 1024
  t1 = j ∗ 32
  t2 = k ∗ 4
  t3 = t1 + t0
  t4 = t3 + t2
  t5 = X[t4] 

下列关于 C 程序源代码的说法中哪一项是正确的?
(A) X 被声明为“int X[32][32][8]”。
(B) X 被声明为“int X[4][1024][32]”。
(C) X 被声明为“char X[4][32][8]”。
(D) X 被声明为“char X[32][16][2]”。答案:(一)
说明:可以按照相反的顺序执行中间代码步骤,将最终表达式简化为 i、j 和 k 的形式

t5 = X[t4]
   = X[t3 + t2]
   = X[t1 + t0 + t2]
   = X[i*1024 + j*32 + k*4]
   = X + i*1024 + j*32 + k*4 

由于 k 乘以 4,因此数组必须是 int 数组。
在给定的 4 个选项中,我们只剩下 2 个选项(A 和 B)。

一维数组中的第 X[i][j][k] 个元素等价于
一维数组中的第 X[i*M*L + j*L + k] 个元素
(请注意,多维数组在 C 中按行主要顺序存储)。

所以我们得到以下方程

j*L*4 = j*32, we get L = 8 (4 is the sizeof(int))
i*1024 = i*M*L*4, we get M = 1024/32 = 32

因此选项 A 是唯一正确的选项,因为 M 和 L 分别为 32 和 8
仅在选项 A 中。
这个问题的测验