基于corrections of annotations to the standard。
3.14对象是驻留在物理内存地址的变量或常量。
- 在C中,常量不驻留在内存中(除了一些字符串文字),因此不是对象。
对我来说,const不会有实际的内存位置(可能除了字符串文字),并且它依赖于编译器,这很可能会用文字值替换对它的所有引用。话虽如此,以下可能如何?
const int * foo;
这声明了一个指向const int
的指针。但是,常量没有地址,那么这究竟意味着什么呢?您不能拥有指向仅在编译时存在的文字值的指针。
答案 0 :(得分:4)
const
变量不是常量。 常量是文字值或由文字值组成的表达式,如3+5/2.4
。这些常量确实不存在于内存中,编译器会在适当的位置插入文字。
答案 1 :(得分:3)
在您的示例中,foo
不是常量,它是 const限定对象:
6.7.3类型限定符
语法的
1 type-qualifier :
const
restrict
volatile
...
3与限定类型关联的属性仅对表达式有意义 是左值。 114)
...
114)实现可以将const
对象放在volatile
的只读区域中 存储。此外,如果其地址是,则实现不需要为这样的对象分配存储 没用过。