📜  const int*、const int * const 和 int const * 之间的区别

📅  最后修改于: 2021-09-12 11:01:47             🧑  作者: Mango

整数常量*

int const*是指向常量整数的指针
这意味着被声明的变量是一个指针,指向一个常量整数。实际上,这意味着指针指向不应更改的值。在这种情况下,const 限定符不会影响指针,因此允许指针指向某个其他地址。
第一个 const 关键字可以位于数据类型的任一侧,因此int const*等效于const int*

#include 
  
int main(){
    const int q = 5;
    int const* p = &q;
  
    //Compilation error
    *p = 7;
  
    const int q2 = 7;
  
    //Valid
    p = &q2; 
      
    return 0;
}

整数 *常量

int *const是指向整数的常量指针

这意味着被声明的变量是一个指向整数的常量指针。实际上,这意味着指针不应指向某个其他地址。在这种情况下,const 限定符不会影响整数的值,因此允许更改存储在地址中的值。

#include 
  
int main(){
    const int q = 5;
    //Compilation error
    int *const p = &q;
  
    //Valid
    *p = 7; 
  
    const int q2 = 7;
  
    //Compilation error
    p = &q2; 
  
    return 0;
}

const int* const

const int* const是指向常量整数的常量指针

这意味着被声明的变量是一个指向常量整数的常量指针。实际上,这意味着常量指针指向一个常量值。因此,指针不应指向新地址,也不应更改所指向的值。
第一个 const 关键字可以在数据类型的任何一侧,因此const int* const等效于int const* const

#include 
  
int main(){
    const int q = 5;
  
    //Valid
    const int* const p = &q;
  
    //Compilation error
    *p = 7;
      
    const int q2 = 7;
  
    //Compilation error
    p = &q2;
      
    return 0;
}

内存映射

记住语法的一种方法(根据 Bjarne Stroustrup 的说法)是螺旋规则-
规则说,从变量名开始,顺时针移动到下一个指针或类型。重复直到表达式结束。

螺旋法则

该规则也可以看作是从右到左解码语法。

const 指向 const int 的指针

因此,

  • int const*指向const int 的指针
  • int *const指向int 的常量指针
  • int const* const指向const int 的const 指针

使用这个规则,即使是复杂的声明也可以像这样解码,

  • int ** const是一个指向int指针的 const指针。
  • int * const *指向int 的const指针的指针
  • int const **是一个指向const int指针的指针
  • INT * const的* const为一个常量指针到一个const指向int。

想要从精选的视频和练习题中学习,请查看 C 基础到高级C 基础课程。