Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

372
Vistas
En C, ¿por qué no se puede cambiar el valor de una variable de puntero a carácter después de haberla asignado?

No entiendo la diferencia entre este caso:

 #include <stdio.h> int main() { int i = 0; i = 1; return 0; }

Y este caso:

 #include <stdio.h> int main() { char *mychar = "H"; *mychar = "E"; return 0; }

Lo que produce la advertencia del compilador "la asignación hace un número entero desde el puntero sin conversión".

¿No debería *mychar = "E" desreferenciar mychar para asignarle el valor de "E"?

Muchas gracias.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Has confundido algunas cosas.

  • Tenga en cuenta que "E" es en realidad const char[] que almacena 'E' y '\0' . No es un solo personaje. Para caracteres individuales usa '', como 'E' .
  • mychar apunta al literal de cadena y no puede cambiar los literales de cadena.

Si lo que tenías en mente es esto:

 char *mychar = "H"; mychar = "E";

Esto está bien, no está cambiando el literal de cadena, solo la primera vez que el puntero mychar apunta al literal de cadena "H", luego a "E".

Esto no lo puedes hacer:

 char *mychar = "Hello"; *mychar = 'E'; // Can't modify the string literal

Pero esto lo puedes hacer:

 char c = 0; char *mychar = &c; *mychar = 'E'; // This is ok
over 4 years ago · Santiago Trujillo Denunciar

0

"E" es un literal de cadena (char*) y 'E' es un literal char (char).

Tenga en cuenta que las dos piezas de código que está comparando no son análogas. La diferencia entre las dos piezas de código (int vs char*) será más clara si escribes

 char* mychar = "H"; *mychar = "E";

El tipo correspondiente al ejemplo int es (char*). Es decir, el código que es análogo al ejemplo "int" es

 char* mychar = "H"; mychar = "E";
over 4 years ago · Santiago Trujillo Denunciar

0

Los literales de cadena pueden almacenarse en la sección de memoria de solo lectura. La modificación de un literal de cadena invoca un comportamiento indefinido. No puedes modificarlo.

Agregue el calificador const para que su compilador sepa que la cadena no es modificable

 char const *mychar = "H";

También debe tener en cuenta que la declaración

 *mychar = "E";

está mal por sí mismo. Está asignando un tipo char * a char .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda