考虑以下两个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是不正确的。
这个问题的测验