常量常常是形如这样:
const int x = 5; //整型常量
const char* pc = "nddd"; //字符型常量
同是常量,但是两者有者不同的存储区。整型常量(数值型常量一类)是立即数,存储在寄存器中。但是字符型常量确是存储在内存中一个叫“文字常量区”的地方,不同系统应该有不同的起始位置。举个例子:
const char* pc = "nddd";
const char* pb = "nddd";
pc与pb是两个指向相同字符常量的不同变量。测试发现,pc与pb指向相同的位置(也就是cout << (void*)pc << (void*)pb;输出相同)。这就引发一个问题:字符型常量的生命周期是多长?答案无非两种情况:1、在某个域内 2、在程序执行范围内,于是,我做了以下实验:
void fun1(){
const char* pc = "123";
cout << (void*)pc << endl;
}
void fun2(){
const char* pb = "123";
cout << (void*)pb << endl;
}
在main()中无论以怎样的顺序执行这两个函数,输出结果都相同。也就是说,定义于“文字常量区”的字符型常量的生命周期是整个程序。但是这里要注意一点,“123”的生命期并不等同于pb或者pc的生命期,pb、pc是变量,他们的生命在函数结束时就结束了。