【问题标题】:constant pointer to an address or pointer to a value指向地址的常量指针或指向值的指针
【发布时间】:2014-03-11 17:51:36
【问题描述】:

int const *aconst int *a 分别表示“a 是指向常量值的整数指针”和“a 是指向常量地址的指针”,还是相反?

这是在一次采访中问我的。在阅读了很多相同的内容之后,我仍然对此感到非常困惑。

【问题讨论】:

  • 在 C++ 中,通常不是阅读“大量”内容,而是阅读正确的内容 :-)

标签: c pointers constants


【解决方案1】:

const 跳过类型关键字(int)时,含义不会改变。

const 跳过* 时,含义会发生变化。

const int *a; /* The int is const */
int const *b; /* The int is const */
int *const c; /* The pointer is const */

【讨论】:

    【解决方案2】:
    • const int *a - a 是可写的(可以指向不同的东西),*a 是不可写的(不能写入指向的东西)
    • int const *a - 同上
    • int * const a - a 不可写(不能指向不同的东西),*a 是可写的(可以写指向的东西)
    • const int * const a - a*a 都不可写
    • int const * const a - 同上

    如果你把前两种情况读成

    const int (*a)
    int const (*a)
    

    很明显const 正在修改int 类型说明符;我们指向一个常量整数

    如果你把第三种情况读作

    int (* const a)
    

    那么const正在修改指针声明符*a;我们有一个指向整数的常量指针

    那么你把最后两种情况读作

    (const int) (* const a)
    (int const) (* const a)
    

    那么很明显,我们有一个const 修改类型说明符,另一个修改指针,所以我们有一个常量指针指向一个常量整数

    【讨论】:

    • 我认为写作-> const int *a 或 int const *a -> 表示 a 是指向常量对象的指针,而写作 -> int (*const a) 表示 ->a 是指针到一个常量地址。
    • 更像,const int *a 表示a 是一个非const 指向const 对象的指针,而int * const a 表示a 是一个指向非的const 指针-const 对象。
    • 非常感谢您的澄清。
    【解决方案3】:
    int const *a;
    

    相当于:

    const int *a;
    

    表示a 是指向const int 对象的指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 2020-12-30
      • 2020-10-23
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      相关资源
      最近更新 更多