Saltar al contenido

¿Por qué C admite negativo? array ¿índices?

Mantén la atención porque en este tutorial vas a hallar la contestación que buscas.Esta división fue aprobado por nuestros expertos para garantizar la calidad y veracidad de nuestro post.

Solución:

El cálculo se realiza en tiempo de ejecución.

Los índices negativos no necesariamente tienen que causar una violación y tienen sus usos.

Por ejemplo, supongamos que tiene un puntero que actualmente apunta al décimo elemento en un array. Ahora, si necesita acceder al octavo elemento sin cambiar el puntero, puede hacerlo fácilmente usando un índice negativo de -2.

char data[] = "01234567890123456789";
char* ptr = &data[9];
char c = ptr[-2]; // 7

Aquí hay un ejemplo de uso.

Un filtro de respuesta de impulso infinito se calcula parcialmente a partir de valores de salida anteriores recientes. Por lo general, habrá algunos array de valores de entrada y un array donde se colocarán los valores de salida. Si el elemento de salida actual es yIDespués yI se puede calcular como yI = un0•XI + un1•Xi–1 +a2•yi–1 +a3•yi-2.

Una forma natural de escribir código para esto es algo como:

void IIR(float *x, float *y, size_t n)

    for (i = 0; i < n; ++i)
        y[i] = a0*x[i] + a1*x[i-1] + a2*y[i-1] + a3*y[i-2];

Observa que cuando i es cero, y[i-1] y y[i-2] tienen índices negativos. En este caso, la persona que llama es responsable de crear una array, configurando los dos elementos iniciales en "valores iniciales" para la salida (a menudo cero o valores retenidos de un búfer anterior) y pasando un puntero a donde se escribirá el primer valor nuevo. Así, esta rutina, IRRnormalmente recibe un puntero en medio de un array y utiliza índices negativos para abordar algunos elementos.

¿Por qué admitir una violación de memoria tan potencial en un programa?

Porque sigue la aritmética de punteros, y puede ser útil en ciertos casos.

¿No debería el compilador lanzar al menos una advertencia de índice negativo? (estoy usando GCC)

La misma razón por la que el compilador no le avisará cuando acceda array[10] cuando el array tiene solo 10 elementos. Porque deja ese trabajo a los programadores.

¿O este cálculo se realiza en tiempo de ejecución?

Sí, el cálculo se realiza en tiempo de ejecución.

Sección de Reseñas y Valoraciones

Si sostienes algún inconveniente o forma de aumentar nuestro reseña te recordamos realizar una glosa y con gusto lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *