GATE | GATE-CS-2015 (Set 3) | Question 40

Consider the following two C code segments. Y and X are one and two dimensional arrays of size n and n × n respectively, where 2 ≤ n ≤ 10. Assume that in both code segments, elements of Y are initialized to 0 and each element X[i][j] of array X is initialized to i + j. Further assume that when stored in main memory all elements of X are in same main memory page frame.

filter_none

edit
close

play_arrow

link
brightness_4
code

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];

chevron_right


Which of the following statements is/are correct?

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) Only S2 is correct
(B) Only S3 is correct
(C) Only S1 and S2 are correct
(D) Only S1 and S3 are correct


Answer: (C)

Explanation: In C, 2D arrays are stored in row major order. Therefore, S2 is correct, but S3 is not correct.

Quiz of this Question

My Personal Notes arrow_drop_up