Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

375
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda