Para un programa en C que accede a X[i][j][k], un compilador genera el siguiente código intermedio. Suponga que el tamaño de un número entero es de 32 bits y el tamaño de un carácter es de 8 bits.
t0 = i ∗ 1024 t1 = j ∗ 32 t2 = k ∗ 4 t3 = t1 + t0 t4 = t3 + t2 t5 = X[t4]
¿Cuál de las siguientes afirmaciones sobre el código fuente del programa C es CORRECTA?
(A) X se declara como “int X[32][32][8]”.
(B) X se declara como “int X[4][1024][32]”.
(C) X se declara como «char X[4][32][8]».
(D) X se declara como “char X[32][16][2]”.
Respuesta: (A)
Explicación: La expresión final se puede simplificar en forma de i, j y k siguiendo los pasos del código intermedio en orden inverso
t5 = X[t4] = X[t3 + t2] = X[t1 + t0 + t2] = X[i*1024 + j*32 + k*4] = X + i*1024 + j*32 + k*4
Dado que k se multiplica por 4, la array debe ser una array int.
Nos quedan 2 opciones (A y B) entre las 4 opciones dadas.
X[i][j][k]’th elemento en una array unidimensional es equivalente a
X[i*M*L + j*L + k]’th elemento en una array unidimensional
(Tenga en cuenta que las arrays multidimensionales se almacenan en orden de fila mayor en C).
Entonces obtenemos las siguientes ecuaciones
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
Por lo tanto, la opción A es la única opción correcta ya que M y L son 32 y 8 respectivamente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA