2

基于对标准注释的更正

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

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

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

const int * foo;

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

4

2 回答 2

4

变量const不是常数常量是文字值或由文字值组成的表达式,例如3+5/2.4. 这样的常量确实不驻留在内存中,编译器将文字插入到适当的位置。

于 2012-05-08T17:43:51.590 回答
3

在您的示例中,foo它不是一个常量,而是一个const 限定的对象

6.7.3 类型限定符

语法

1      type-qualifier : ... 3 与限定类型相关的属性仅对左值表达式有意义。114) ... 114) 实现可以放置不在只读存储区域中的对象。此外,如果从未使用过此类对象的地址,则实现不需要为此类对象分配存储空间。
        const
        restrict
        volatile




constvolatile
于 2012-05-08T17:56:46.093 回答