Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

557
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!