es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo funcionan los índices C para enteros en C

En el curso en línea de mi universidad, me encontré con el siguiente hecho interesante:

La ejecución de la siguiente línea producirá ”\0”:

5[“Peklo”]

También probé algunos ejemplos diferentes pasando diferentes enteros y literales de cadena. Sé que las cadenas en C son punteros de tipo ‘const char *’, por lo tanto, ese código es válido y se compilará, pero no puedo entender cómo se calcula o depende el resultado de la salida del valor entero que se pasa al indice de la cadena. Si alguien lo sabe, ¿me puede explicar detalladamente por qué ‘0[“P”]’, ‘0[“A”]’ y ‘1[“A”]’ producen resultados diferentes (80, 65, 0)?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La expresión 5["Peklo"] es equivalente a "Peklo"[5] que accede al sexto carácter en la cadena (contando desde 0), el cual es el carácter de terminación nulo ('\0'). Esto se debe a que las cadenas en C están terminadas en nulo, lo que significa que terminan con un carácter nulo.

    De manera similar, 0["P"] es equivalente a "P"[0] que accede al primer carácter en la cadena, devolviendo el valor ASCII de ‘P’ (80). De manera similar, 0["A"] es equivalente a "A"[0] que accede al primer carácter, devolviendo el valor ASCII de ‘A’ (65).

    Por otro lado, 1["A"] es equivalente a "A"[1], que intenta acceder al segundo carácter en la cadena. Sin embargo, como "A" solo tiene un carácter (el carácter de terminación nulo), esto resulta en un comportamiento indefinido. En este caso, parece devolver 0, pero podría haber devuelto cualquier valor.

    En resumen, el valor dentro de los corchetes se utiliza como un índice para acceder a los caracteres en la cadena, y acceder a caracteres fuera del rango de la cadena o al carácter de terminación nulo puede resultar en un comportamiento indefinido.

Comments are closed.