在C中声明指针类型的参数时使用`const`

时间:2018-03-22 10:10:54

标签: c pointers

我知道在const类型之前加p会保护p指向的对象,但是:

void f(int * const p)

此声明是否合法?

另外,以下内容之间有什么区别:

  1. void f(const int *p)
  2. void f(int * const p)
  3. void f(const int * const p)
  4. void f(int const *p)

1 个答案:

答案 0 :(得分:4)

  

此声明是否合法?

是的,虽然效果与const的{​​{1}}类型之前的效果不同。

  

另外,以下内容之间有什么区别:

  1. p

    void f(const int *p)类型之前放置const 可以保护p指向的对象。

    示例:

    p
  2. 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 } 仅仅是另一个的副本,因此很难使用此功能 指针,很少有任何保护它的理由。更为罕见的是 下一个案例。

  3. p

    此处void f(const int * const p)正在保护const及其指向的对象。

    示例:

    p
  4. void f(const int * const p) { int j; *p = 0; //WRONG p = &j; //WRONG }

    这与void f(int const *p)相同。 见第1点。