const int*、const int * const 和 int const * 的区别

const int*、const int * const 和 int const * 的区别

int const*

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

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

第一个 const 关键字可以位于数据类型的任意一侧,因此 int const* 等效于 const int*

#include <stdio.h>

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

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

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

#include <stdio.h>

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 <stdio.h>

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 int*、const int * const 和 int const * 的区别

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

const int*、const int * const 和 int const * 的区别

因此,

int const* 是指向 const int 的指针;

int *const 是指向 int 的 const 指针;

int const* const 是指向 const int 的 const 指针;

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

  • int ** const 是指向 int 指针的 const 指针。
  • int * const * 是一个指向 const 的指针,指向一个 int
  • int const ** 是一个指向 const int 的指针。
  • int * const * const 是一个指向 intconst 指针的 const 指针。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程