por qué el primer índice de matrices comienza con 0pregunta relacionada con el índice de matrices en el lenguaje c
Respuesta
Porque los aritméticos de puntero son más fáciles de esa manera.
En C puede tratar las matrices como punteros. De ese modo, si usted tiene esta matriz:
char a[50];
char *ptr = a;
El uso de aritmética de punteros, puede mover el puntero mediante la adición de números enteros a ella esta manera:
*(ptr + 0); // first character in the array
*(ptr + 1); // second character in the array
// so on, so forth
Debido a que el índice en realidad significa el desplazamiento desde el puntero. El desplazamiento del primer elemento es 0.
Actualización sobre el comentario Bien, lo intentaré.
Consideremos una matriz de bytes con 10 elementos:
byte array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
considerar las celdas de memoria donde se encuentra esta matriz (deja suponer que se inicia desde el 0010H dirección):
0010 0011 0012 0013 0014 0015 0016 0017 0018 0019
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
Nuestra variable array
apunta a 0010h
.
El desplazamiento de 1
(el primer elemento) es 0
y su dirección real es 0010 + 0
(donde 0010
es la dirección de array
y 0
es el desplazamiento).
El desplazamiento de 3
(el tercer elemento) es 2
porque está en la tercera celda, y el tamaño de celda es 1
(porque tenemos matriz de bytes). la dirección real del 3er elemento es 0010 + 2
.
Volviendo a nuestro lenguaje de programación: array[0]
significa que el contenido de la celda de memoria que tiene la dirección 0010
, array[1]
significa que el contenido de la celda de memoria con la dirección 0010 + 1
(segundo elemento) y así sucesivamente. *array
en C se refiere al primer elemento, *(array+1)
- al segundo.
¿Puede responder más claramente su concepto a través de poniters? – user530647
@ user530647 actualizado, por favor vea ¿está claro? – khachik
Porque el elemento 0 está a una distancia de 0 desde el comienzo de la matriz. Es el primer elemento, pero está en la posición 0, al igual que la forma en que no hay años mayores que 100 en el primer siglo.
Primero y más importante: porque el compilador estándar/así lo dice. En segundo lugar, debido a la aritmética del puntero. Si tiene una matriz A, entonces A + 0 es el primer elemento, A + 1 segundo y así sucesivamente. Es la forma en que se representa la matriz en la memoria.
La misma razón por la que las personas con mentalidad matemática llaman al mañana "un día a partir de ahora" en lugar de "dentro de dos días".
El primer índice siempre comienza con cero debido a la forma en que los compiladores usan el valor de un índice para calcular la dirección real de un elemento en la matriz.
Considere el siguiente ejemplo.
void someFunction()
{
int exampleArray[5] = {0, 1, 2, 3, 4};
}
"exampleArray", necesita espacio para almacenar 5 elementos, y cada elemento requerirá la cantidad de espacio necesario para almacenar un tipo de datos "int". Según la plataforma (16 bits/32 bits o 64 bits) y el sistema operativo, el tamaño del tipo de datos "int" puede ser diferente. Para nuestra discusión, digamos que el tamaño de "int" es de 4 bytes.
Por lo tanto, para almacenar la matriz anterior en la memoria, necesitamos memoria para 5 enteros = 5 * 4 = 20 bytes. Ahora, cada elemento de esta matriz tiene una "dirección".
Digamos que "exampleArray" se almacena en la dirección 100. Entonces la dirección del elemento en un índice "i" será 100+ (i * sizeof (int)). Por lo tanto, para la matriz anterior,
Index 0, address = 100 + (0 * 4) = 100
Index 1, address = 100 + (1 * 4) = 104
Index 2, address = 100 + (2 * 4) = 108
Index 3, address = 100 + (3 * 4) = 112
and so on..
Así es como el compilador genera código para acceder a índices de matriz. Así que cuando escribimos exampleArray [2], la computadora necesita poder calcular la dirección del elemento en el índice 2, para poder acceder a su ubicación de memoria, y así acceder a su valor. Así como por la fórmula anterior, elemento en el índice "2" será 100 + (2 * 4) = 108.
Desde el primero elemento de la matriz tendrá que ser en la dirección 100, su índice se convierte en 0 por lo como calcular su dirección de una manera simple.
- 1. ¿Alguna pregunta relacionada con la entrevista de trabajo relacionada con los buenos hilos?
- 2. C pregunta tutorial relacionada con calloc vs malloc
- 3. Pregunta - lenguaje formal en prolog
- 4. Otra pregunta más relacionada con los puntos de secuencia
- 5. índice de iteración lenguaje
- 6. ¿Debe validar en el modelo? (Pregunta basada en Symfony, pero relacionada con MVC general)
- 7. ¿Extender el lenguaje C#?
- 8. Confusión de índice en matrices numpy
- 9. cuestión de asignación de memoria relacionada con el vector
- 10. Llamar C++ (C) desde el lenguaje D
- 11. Fusionando dos matrices por índice
- 12. Índice Definido en $ _POST (pregunta novato!)
- 13. extendiendo el lenguaje de programación c con gcc
- 14. ¿Es el lenguaje PHP resultante C?
- 15. Ordenar una matriz relacionada con otra matriz
- 16. C++ matrices con nombre
- 17. UML para el lenguaje de programación C
- 18. C# como lenguaje de script
- 19. Mejor analizador de lenguaje cruzado para utilizar con el índice de lucene
- 20. Cómo dibujar el gráfico en framebuffer usando el lenguaje c ...?
- 21. Pregunta matemática en C o en el objetivo C
- 22. índice agrupado de SQL Server - Orden del Índice Pregunta
- 23. Cómo evitar que Jetty muestre información relacionada con el contexto
- 24. array dividido en dos matrices de índice par o impar
- 25. Extender el lenguaje C#, ¿cuánto esfuerzo/ganancia?
- 26. Inicializando matrices en C++
- 27. Desarrollo basado en web para el lenguaje C
- 28. ¿Qué pasó con Java (específicamente el lenguaje)?
- 29. matriz de matrices en C#
- 30. Problema con el índice jQuery()
posible duplicación de [Defender matrices basadas en cero] (http://stackoverflow.com/questions/393462/). Ver también: [¿Por qué las matrices comienzan desde cero?] (Http://stackoverflow.com/questions/509129/) –