Autor Tema: Arreglos en C

0 Usuarios y 2 Visitantes están viendo este tema.

28 Febrero, 2014, 05:38 pm
Respuesta #10

Autodidacta

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 65
  • Karma: +0/-0
  • Sexo: Masculino
Vienen a ser lo mismo puedes usar las dos sintaxis, pero tienen  ligeras diferencias:

Esto normalmente da error bestia, un segmentation fault.
Código: [Seleccionar]
void main(void)
{
char *palabra = "hola";
palabra[1] = 'X';
}

Esto funciona correctamente:
Código: [Seleccionar]
void main(void)
{
char palabra[] = "hola";
palabra[1] = 'X';
}

La diferencia esta en que la cadena "hola" es un literal constante, que queda almacenado de forma estática en el propio ejecutable del programa.

Al usar un puntero y asignarlo a un literal, este queda apuntado a esa zona del programa, que normalmente esta protegida y es de solo lectura, no se puede escribir en ella. Y aunque se pudiese escribir en ella no seria aconsejable, porque otras partes del codigo pueden estar usando ese mismo literal "hola", y darían error o no funcionarían como deberían, al no encontrarse el texto que esperaban, por haber sido modificado.
Es decir si usas una cadena literal por ejemplo "Hola" en 50 sitios diferentes de un programa, es el mismo texto/zona de memoria "Hola" para todo el mundo, asi que seria muy malo que el texto cambiase.

En cambio al usar un array, el programa no apunta el array hacia esa zona de memoria, sino que crea una zona nueva de memoria para el array, y copia la cadena "Hola" a esa zona nueva de memoria, asi se puede modificar y no afecta a otras partes de programa que estén usando ese mismo texto.

28 Febrero, 2014, 05:48 pm
Respuesta #11

lul

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 126
  • Karma: +0/-0
  • Sexo: Femenino
barbaro , muchas gracias  :aplauso: