2010-12-04 11 views

Respuesta

1

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 
5

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.

+0

¿Puede responder más claramente su concepto a través de poniters? – user530647

+0

@ user530647 actualizado, por favor vea ¿está claro? – khachik

0

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.

0

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.

2

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".

0

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.

Cuestiones relacionadas