在阅读关于指针的教程时,我遇到了像这样的代码
const int *p;
和
int const *p;
和
int *const p;
它们的主要区别是什么?
虽然我分配了任何整数值的地址,例如
int b=100;
b=&p;
我收到错误。这有什么意义呢?任何人都可以用例子来解释它吗?
答案 0 :(得分:3)
大部分时间,只需从右到左阅读。
int const *p;
“p
是指向const
int
”的指针。
int *const p;
“p
是指向const
”的int
指针。
例外情况是const
是最左边的关键字:
const int *p;
然后它与:
相同int const *p;
如果指针是const
,则无法修改其地址,但可以更改其指向的值。如果指向的值为const
(在您的情况下为int
),那么您无法修改指针所指向的内容(但您可以将其指向其他内容)。
作为一个无关的事情,这无法编译:
int b=100;
b=&p;
因为您要将指针的地址(int **
)分配给b
。这是非法转换。你可以用演员逼迫它,但我不认为这就是你想要的。