📜  门| GATE-CS-2015(Set 3)|第40章

📅  最后修改于: 2021-07-02 17:18:19             🧑  作者: Mango

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