const定义常量的问题
我知道使用#define定义常量是在预编译阶段实现替换;但是对const的使用确不是很明白,比如定义个一个常量:
const int MINPH = 60;
那么对于这个语句预编译器应该不会执行的,就不存在替换现象。但是我想问一下MINPH是不是占用内存空间?编译器怎么处理这个变量的?
[解决办法]
占用空间
存储跟一般int 变量一样,只是编译器给它标上了只读的标志
[解决办法]
确实,没有动用预编译器。
但是,不是只有预编译器才执行“替换现象”呀。
MINPH可能占用空间也可能不占用空间。应该让你的代码不关心它是否占用内存。
google “常量折叠”吧。
[解决办法]
< <c++编程思想> > 7.1 const和枚举
C + +编译器通常并不为c o n s t分配存储空间,而是把它保存在符号表里。当c o n s t被使用时进行常量折叠。
当然,绝对不为任何c o n s t分配存储是不可能的,尤其对于复杂的结构。和象上面的extern 声明的.取一个常量的地址等情况下,编译器建立存储而不是常量折叠。
[解决办法]
其实#define也是占用空间的。
比如#define string "hello "
虽然替换,但是也需要存储 "hello "的空间啊。
[解决办法]
#include "stdio.h "
int main()
{
const int c1 = 100;
int* p1 = (int*)&c1;
printf( "%p\n%d\n ", &c1, c1);
*p1 = 200;
printf( "%p\n%d\n ", p1, *p1);
printf( "%p\n%d\n ", &c1, c1);
return 0;
}
用c++编译的结果是
0012FF60
100
0012FF60
200
0012FF60
100
请按任意键继续. . .
用c 编译的结果是
0012FF60
100
0012FF60
200
0012FF60
200
请按任意键继续. . .
可以看出,在c++里 const 大致就是define了
在c里,就是一个只读变量