在C中使用&(addressof)和const变量

教科书说&(addressof)运算符不适用于不能应用于表达式,
常量或寄存器变量。
常量是否只表示像’A’,’7’等文字或用const关键字声明的变量?
我认为这意味着只有文字,因为以下代码编译: –

int main() { const int i=10; const int *ip; ip = &i; 

}

一元运算符& C语言可以应用于任何左值。 const限定对象是左值,这意味着一元&可以应用于它。

C中的术语“常量”实际上仅表示文字常量,例如2 。 在C术语中,const限定对象不是“常量”。

否 – 它可以应用于限定为const的变量。 但请注意,这样做(通常)意味着编译器必须实际为该变量分配一个地址 – 如果您只以不需要地址的方式使用它,则通常不需要分配const变量任何存储(即,使用const变量生成的代码通常几乎就像你直接使用文字一样,但你的源代码会改为使用有意义的名称)。

&operator可以应用于任何具有内存地址的内容。由于它们存储在CPU寄存器中,因此无法应用寄存器变量。
同样在C ,常量不是编译时常量(即总是分配存储),所以你可以安全地获取常量变量的地址。但是在C++ ,如果你获取一个const变量的地址,它将不是一个编译时常量,并且分配存储。
编辑
通过常量我的意思是,用const关键字声明的变量,像A,7这样的文字本质上是编译时常量。编译器可以直接将它们存储在它的符号表中。