考虑以下两个 C 代码段。 Y 和 X 分别是大小为 n 和 n × n 的一维和二维数组,其中 2 ≤ n ≤ 10。假设在两个代码段中,Y 的元素都初始化为 0,并且每个元素 X[i][j]数组 X 被初始化为 i + j。进一步假设当存储在主存中时,X 的所有元素都在同一个主存页框中。
Code segment 1:
// initialize elements of Y to 0
// initialize elements X[i][j] of X to i+j
for (i = 0; i < n; i++)
y[i] + = X[0][i];
Code segment 2:
// initialize elements of Y to 0
// initialize elements X[i][j] of X to i+j
for (i = 0; i < n; i++)
y[i] + = X[i][0];
以下哪些陈述是/是正确的?
S1: Final contents of array Y will be same in both code segments.
S2: Elements of array X accessed inside the for loop shown in
code segment 1 are contiguous in main memory.
S3: Elements of array X accessed inside the for loop shown in
code segment 2 are contiguous in main memory.
(A)只有 S2 是正确的
(B)只有 S3 是正确的
(C)只有 S1 和 S2 是正确的
(D)只有 S1 和 S3 是正确的答案: (C)
说明:在 C 中,二维数组按行主顺序存储。因此,S2 是正确的,但 S3 是不正确的。
这个问题的测验