¿Cuál es la diferencia entre Const * char y Const Char *?

2 Respuestas


  • No hay un "const * char". No se compilará. Supongo que lo que quisiste decir es "char * const", versus "const char *".

    Son completamente diferentes.

    char * const p1;

    declara un puntero constante a través del cual puede tener acceso de lectura y escritura a un char. Pero el puntero en sí es una constante y NO puede cambiarlo. Como todas las demás variables constantes, debe inicializarla con un valor constante al mismo tiempo que se declara. No puede configurarlo más adelante en el código.

    const char * p2;

    declara un puntero a través del cual puede acceder a un carácter pero no puede cambiarlo a través de dicho puntero. Pero el puntero en sí se puede cambiar.

    Tenga en cuenta que existe el mito de que muchas personas, incluidas algunas con varias décadas de experiencia en programación, piensan que "const char *" significa un puntero a un carácter constante. Eso está totalmente mal. "const char *" solo significa que el char no se puede modificar usando el puntero. Bien puede ser un carácter cambiante regular, modificable a través de otros medios u otros indicadores. Es solo que el compilador NO le permitiría cambiar esa dirección de caracteres a través del puntero de caracteres const.

    Un carácter constante real no se puede cambiar en absoluto, no importa cómo lo intente. Un char const real puede colocarse en la memoria de solo lectura, por lo que es simplemente físicamente imposible cambiarlo en tiempo de ejecución. O puede que no se le asigne ningún espacio de almacenamiento y se utilice directamente en el lugar donde se haga referencia a dicho carácter constante. En este último caso, ciertamente no hay forma de que se pueda derivar un puntero para apuntar al carácter, ya que no ocupa ningún espacio de almacenamiento.

    Así que tenga en cuenta que "const char *" NO es "un puntero a un carácter constante".

    ¿Qué pasa con "const char []". Eso es diferente a "const char *". En el caso "const char []", define una matriz de caracteres constante y el mismo nombre de variable se refiere tanto a la matriz como a un puntero al principio de la matriz. De hecho, es constante en este caso.
  • Const char * nombre_variable
    declara un puntero a un carácter constante. No podemos usar este puntero para cambiar el valor al que se apunta.

    Const * char variable_name
    no podemos declarar ningún puntero constante como este.

Escribe tu respuesta

Tu respuesta aparecerá después de la moderación