const int * a;
从右到左阅读声明.[见注释]你得到了什么?a
是*
指向int
整数const
即指数常数的指针.简而言之,变量a
指向一个整数,其值不能更改.至少,不是通过a
.指针对象是否真的是不可变的是一个不同的问题.但事实仍然是,你不能a
用来修改*a
;
const
是你对自己做出的承诺:我永远不会尝试使用指向const的指针来修改指针.编译器只为您提供支持.
如果你真的想写入指针,你需要一个非const指针,如:
int *a; *a = 42; /* this is fine */
来自bortzmeyer的一个非常好的评论:(我以为我会跳过这个以保持简单:)
你也可以把它放在
const
后面*
(如你所说,声明应该从右到左阅读).
他的意思是:
const int *a;
没有什么不同
int const *a;
(请记住,从右到左阅读规则?)但与以下内容有很大不同:
int * const p;
读它,我们得到:p
是const
(-ant)*
(指针)到int
(-eger).翻译:一旦你设置p
为指向一个整数,你就不能重置它(即写入它以使它指向另一个整数 - 使得p
常量点),但你可以非常多地写入指针(指针不是不变).
注意:对于迂回倾向的人来说,Darron的"规则"是:
"声明应该从右到左阅读"是一种简化 - 如果有括号,则应从内到外阅读.除非括号表示函数调用.真正的规则是"把它视为一种表达;如果我应用这些操作符,我最终会得到这种简单的类型".
这个答案真的会少得多,但对于bortzmeyer和Darron来说 - 谢谢!
PPS :(我保证这将是最后一次编辑.好吧,希望!)
void main()
不是C或C++中main的标准签名.在你认识自己之前不要使用它,或者(更重要的是)你的代码将永远无法前往另一个宇宙.