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

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

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

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

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

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 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