2010-04-01 11 views

Respuesta

6

Porque el compilador necesita averiguar cómo acceder a los datos de la memoria. La primera dimensión no es importante porque el compilador puede contar el número de elementos cuando se dan todos los demás tamaños.

Ejemplos:

int a1[] = { 1, 2, 3, 4 } 

compilador sabe a asignar espacio para 4 enteros. Ahora, con esto:

int a2[][] = { 1, 2, 3, 4, 5, 6} } 

compilador no puede decidir si debe ser a2 [1] [6] o a2 [2] [3] o a2 [3] [2] o a2 [6] [1] . Una vez que le digas la segunda dimensión, puede calcular la primera.

Por ejemplo, intentar acceder al elemento a2 [1] [0] arrojaría valores diferentes según la declaración. Podría obtener 2, 3, 4 o incluso una posición no válida.

+0

¿Podría dar un ejemplo? ¿Cómo es que si tengo un compilador [3] [4] solo necesita un [] [4]? No puedo entender esto. De Verdad. –

+0

Le da al compilador la información suficiente para saber cómo guardar cosas en la memoria. Si tienes 12 elementos y le dices un [] [], podrían ser dos números cualquiera (xey) que se multipliquen a 12. Si le das un [] [4], sabe que x y 4 se multiplican a 12 , entonces x debe ser 3. Si ayuda a que sea lógico, configure una ecuación básica con cada dimensión a la izquierda y la cantidad total de elementos a la derecha. Es difícil o imposible de resolver por más de 1 variable. – ssube

+0

@peachykeen: esto es algo engañoso. Las dimensiones son necesarias para calcular la dirección de un elemento de matriz. Sin embargo, la primera dimensión no es necesaria, ya que no es necesaria para el cálculo de la dirección (el límite superior es irrelevante). –

1

Siéntese y descubra cómo encontrar la posición de memoria de a[i][j] dada la posición de inicio de la matriz.

Tenga en cuenta que las matrices C son dispuestos como esta nota a[0][0]a[0][1]a[0][2] ... a[0][M]a[1][0] ...

lateral: matrices FORTRAN se disponen de forma diferente: a[1][1]a[2][1]a[3][1] ... a[N][1]a[1][2] ..

Observe cómo esto cambiaría cuya dimensión es necesaria para encontrar posiciones de memoria.

4

No es la "segunda dimensión" (excepto cuando solo tiene 2 dimensiones): es "casi la primera dimensión". Entonces puede tener int a[][2][3][4] por ejemplo. Sin estas dimensiones, no sería posible calcular la dirección de un elemento.

Cuestiones relacionadas