我知道在const
类型之前加p
会保护p
指向的对象,但是:
void f(int * const p)
此声明是否合法?
另外,以下内容之间有什么区别:
void f(const int *p)
void f(int * const p)
void f(const int * const p)
void f(int const *p)
答案 0 :(得分:4)
此声明是否合法?
是的,虽然效果与const
的{{1}}类型之前的效果不同。
另外,以下内容之间有什么区别:
p
在 void f(const int *p)
类型之前放置const
可以保护p
指向的对象。
示例:
p
void f(const int *p) {
int j;
*p = 0; //WRONG
p = &j; //legal
}
在 void f(int * const p)
类型之后放置const
可以保护p
本身。
示例:
p
由于void f(int * const p) {
int j;
*p = 0; //legal
p = &j; //WRONG
}
仅仅是另一个的副本,因此很难使用此功能
指针,很少有任何保护它的理由。更为罕见的是
下一个案例。
p
此处void f(const int * const p)
正在保护const
及其指向的对象。
示例:
p
void f(const int * const p) {
int j;
*p = 0; //WRONG
p = &j; //WRONG
}
这与void f(int const *p)
相同。
见第1点。