C const - 如果const是一个rvalue(即没有存储在内存中),指向const的指针怎么办?

时间:2012-05-08 17:32:14

标签: c

基于corrections of annotations to the standard

  

3.14对象是驻留在物理内存地址的变量或常量。

     
      
  • 在C中,常量不驻留在内存中(除了一些字符串文字),因此不是对象。
  •   

对我来说,const不会有实际的内存位置(可能除了字符串文字),并且它依赖于编译器,这很可能会用文字值替换对它的所有引用。话虽如此,以下可能如何?

const int * foo;

这声明了一个指向const int的指针。但是,常量没有地址,那么这究竟意味着什么呢?您不能拥有指向仅在编译时存在的文字值的指针。

2 个答案:

答案 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的只读区域中 存储。此外,如果其地址是,则实现不需要为这样的对象分配存储 没用过。