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

559
Vistas
¿De dónde obtiene const char* el puntero a una dirección de memoria?

Esta puede ser una pregunta simple, pero ¿por qué un const char* no necesita una dirección de memoria a la que apuntar?

Ejemplo:

 const char* a = "Anthony";

y no:

 const char *a = // Address to const char

como cualquier otro tipo?

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

0

¿Por qué un const char no necesita una dirección de memoria a la que apuntar?*

Lo hace.

Un literal de cadena C como

 "Anthony"

se decae a la dirección de su 1º carácter. Como, por cierto; cualquier matriz en C lo hace.

over 4 years ago · Santiago Trujillo Denunciar

0

Puedes imaginar esta declaración.

 const char* a = "Anthony";

de la siguiente manera

 const char string_literal[] = "Anthony"; const char *a = string_literal;

Es decir, el compilador crea una matriz de caracteres con la duración de almacenamiento estático que almacena la cadena "Anthony" y la dirección del primer carácter de la matriz (debido a la conversión implícita de los designadores de matriz en punteros a sus primeros caracteres) se asigna a el puntero a .

Aquí hay un programa demostrativo que muestra que los literales de cadena son matrices de caracteres.

 #include <iostream> #include <type_traits> decltype( auto ) f() { return ( "Anthony" ); } template <size_t N> void g( const char ( &s )[N] ) { std::cout << s << '\n'; } int main() { decltype( auto ) r = f(); std::cout << "The size of the referenced array is " << std::extent<std::remove_reference<decltype( r )>::type>::value << '\n'; g( r ); return 0; }

La salida del programa es

 The size of the referenced array is 8 Anthony

El tamaño del literal de cadena (de la matriz que almacena el literal de cadena) es igual a 8 porque la cadena incluye también el carácter cero de terminación ' \0' .

En el programa demostrativo la expresión

 std::extent<std::remove_reference<decltype( r )>::type>::value

puede sustituirse solo por la expresión

 sizeof( r )
over 4 years ago · Santiago Trujillo Denunciar

0

"¿Por qué const char* no necesita un puntero a una dirección de memoria?"

De hecho, necesita una dirección de memoria a la que apuntar.

const char* a significa que a es un puntero a un literal de cadena o una constante de carácter.

Un puntero siempre requiere una dirección a la que apuntar porque es la naturaleza de un puntero apuntar a un objeto específico en la memoria. Entonces, a y cualquier otro puntero a const char también lo hacen.

Un literal de cadena como "Hi My Name is Alfred!" por una tarea como:

 const char* a; a = "Hi My Name is Alfred!";

decae a un puntero a la dirección del primer elemento del literal de cadena.

Significa, a su vez, que se asigna a la dirección del primer elemento del literal de cadena "Hi My Name is Alfred!" que podría almacenarse en cualquier lugar de la memoria dependiendo del entorno de ejecución.

No está en el poder de un programador donde un literal de cadena se almacena exactamente. Su tarea es solo asignar y manejar el puntero respectivo de manera apropiada.

over 4 years ago · Santiago Trujillo Denunciar

0

Necesita una dirección de memoria y TIENE una dirección de memoria. En su ejemplo, es simplemente la dirección de memoria del comienzo de la cadena. Es lo mismo con cualquier otra variable de matriz que se inicializa en tiempo de compilación, por ejemplo, "int matriz [] = {0, 1, 2, 3};".

Si usó un editor binario para mirar el ejecutable, vería la cadena "Anthony" allí. Si coloca la línea "printf ("a está en %p\n", (void *)a);" en su programa, luego compílelo y ejecútelo, verá la dirección.

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