¿Dónde y cómo se almacenan las constantes?
Leí esta pregunta deaquíy también leí preguntas relacionadas dec-faq pero no entiendo la razón exacta detrás de esto: -
#include <iostream>
using namespace std;
int main()
{
//const int *p1 = (int*) &(5); //error C2101: '&' on constant
//cout << *p1;
const int five = 5;
const int *p2 = &(five);
cout << *p2 << endl;
char *chPtr = (char*) &("abcde");
for (int i=0; i<4; i++) cout << *(chPtr+i);
cout << endl;
return 0;
}
Me preguntaba cómo se almacenan las constantes, enteras o literales. Mi comprensión de los literales de cadena es que se crean enmemoria estática global al inicio del programa y persistir hasta la salida del programa. En el caso de"abcde"
a pesar de que no le di un nombre variable, puedo tomar su dirección (chPtr
) y supongo que probablemente podría desreferenciarchPtr
en cualquier momento antes de la finalización del programa y los valores de los caracteres seguirían allí, incluso si lo desreferencia fuera del alcance donde se declaró. Es elconst int
variable"five"
También se coloca en estática global y esa direcciónp2
también se puede hacer referencia en cualquier momento?
¿Por qué puedo tomar la dirección de"five"
pero no puedo pedir:&(5)
? Son las constantes"5"
y"five"
almacenado de manera diferente? y donde"5"
se almacena en la memoria?