asignaciones de puntero de caracteres constantes

3 minutos de lectura

asignaciones de puntero de caracteres constantes
usuario32262

¿Son válidas las siguientes asignaciones? O cualquiera de estos creará problemas. Por favor recomiende.

const char * c1;  
const char * c2; 
const char * c3;
char * c4;

c2 = c1;
c2 = c3;
c2 = c4;

¿Qué sucede si hago lo siguiente? ¿Está bien hacerlo?

const char * c5 = "xyz";
char * c6 = "abc";

c2 = c5;
c2 = c6;

  • @ Kshitij Mehta: no es una tarea, nos enfrentamos a un problema de memoria con nuestra amplia base de código. Así que por favor cualquier ayuda sería apreciada.

    – usuario32262

    12 de octubre de 2011 a las 9:21

  • @user Has hecho la misma pregunta varias veces. Les hemos respondido una y otra vez. Su edición a esta pregunta no agrega nada. Simplemente repite lo que preguntaste arriba.

    –David Heffernan

    12 de octubre de 2011 a las 9:31

  • Pido disculpas si estoy preguntando lo mismo. Tal vez mi comprensión con los punteros no sea precisa.

    – usuario32262

    12 de octubre de 2011 a las 9:38

  • Tal vez podría tratar de explicar lo que está luchando por entender. ¡Creo que debes probar algo diferente porque esta pregunta obtendrá la misma respuesta cada vez que la hagas! 😉 Intenta expresarte de una manera diferente a como lo has hecho hasta ahora.

    –David Heffernan

    12 de octubre de 2011 a las 10:07


1646972467 492 asignaciones de puntero de caracteres constantes
ed sanar

En tu mente dibuja una línea a través del asterisco. A la izquierda está lo que se apunta y a la derecha qué tipo de puntero

Por ejemplo

  1. const char * const p – El puntero p es constante y también lo son los personajes que p apunta a – es decir, no puede cambiar tanto el puntero como el contenido a lo que p puntos a
  2. const char * pp apunta a caracteres constantes. Puede cambiar el valor de p y hacer que apunte a diferentes caracteres constantes. Pero lo que sea p apunta, no puede cambiar el contenido.
  3. char * const p – No puede cambiar el puntero pero puede cambiar el contenido

y finalmente

  1. char * p – Todo está en juego

Espero que ayude.

  • ¿Quiere decir tener 2 * s en el primer ejemplo?

    – Martín Thompson

    12 de octubre de 2011 a las 10:31

  • Muy claro. Buen post. Solo estaba recorriendo y preguntándome por qué podría cambiar un const char* ptr como argumento de entrada, y esto se aclaró perfectamente. Me quedé sin votos por otros 40 minutos, así que haré ++ después de eso.

    – Stevieb

    29 de junio de 2017 a las 23:12

  • sin esta respuesta nunca entendería la diferencia entre 2 y 3.

    –Joey Liu

    11 de noviembre de 2020 a las 1:59

Todas son declaraciones válidas siempre y cuando no las desreferencia porque todos los punteros se dejan sin inicializar o no apuntan a ninguna ubicación de memoria válida.

Y son válidos porque el puntero no es constante pero el valor apuntado por el puntero es constante. Entonces, los punteros aquí son reasignables para apuntar a una ubicación diferente.

asignaciones de puntero de caracteres constantes
David Heffernan

Todas estas asignaciones son perfectamente válidas, como yo y otros hemos explicado en su serie reciente de preguntas casi idénticas.

A const char* es un puntero a la memoria que no se puede modificar usando ese puntero. Nada aquí puede eludir eso. El compilador objetaría si asignas c4 = c1 desde entonces eso eludiría la const.

Todos estos son válidos, la única línea problemática es char * c6 = "abc";: aquí “abc” es un literal const, por lo que asignarlo a un puntero que no sea const no es seguro, y al menos debería generar una advertencia si no un error de compilación (no intenté compilarlo).

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad