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

📅  最后修改于: 2021-06-29 12:03:08             🧑  作者: 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]”。答案: (A)
说明:可以通过以相反顺序遵循中间代码步骤,以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中。
这个问题的测验