2011-11-21 151 views
0

在阅读关于指针教程,我面临着像他们这种常量指针和整型常量指针有什么区别?

const int *p; 

int const *p; 

int *const p; 

请告诉我的主要区别码?

虽然我指定的任何整数值的地址,像

int b=100; 
b=&p; 

我收到错误。这有什么意义?有人可以用例子来解释吗?

+0

尝试任何这些:http://stackoverflow.com/search?q=const+before+after – titaniumdecoy

回答

3

大多数时候,只需从右向左读取它。

int const *p; 

p是一个指向constint”。

int *const p; 

pconst指针到int”。

唯一的例外是当const是lefmost关键字:

const int *p; 

然后,它的一样:

int const *p; 

如果指针const,那么你就不能修改其地址,但您可以更改其指向的值。如果指向的值是const(在你的情况下是int),那么你不能修改指针指向的内容(但你可以指向其他内容)。

到无关的事,这无法编译:

int b=100; 
b=&p; 

因为你分配指针veriable(一int **)的地址b。这是非法转换。你可以用演员强制它,但我不认为这就是你想要的。

+0

假设变量命名是一致的,'B =&P;',因为我们正在分配指针的地址应该失败(即指针)到一个整数,不是? –

+0

@undur的确。男人,我一定很累,没有看到! –