Skip to content

Latest commit

 

History

History
36 lines (22 loc) · 1.83 KB

指针常量和常量指针的区别.md

File metadata and controls

36 lines (22 loc) · 1.83 KB
  1. **常量指针: 常量指针是一个指向常量数据的指针,这意味着指针指向的数据不可以通过这个指针被修改。然而,指针本身的值(即存储的地址)是可以更改的;它可以指向另一个常量数据或非常量数据的地址。

    在C/C++中,常量指针的声明如下:

    const int *ptr;
    // 或者
    int const *ptr;

    上述两种声明方式都表示ptr是一个指向int类型常量的指针。你不能通过ptr来改变所指向的值,但可以改变ptr的值使其指向另一个int类型的地址。

  2. **指针常量 : 指针常量是一个指针,它自身的值是常量,也就是说,一旦被初始化之后,指针的值(它所存储的地址)就不能再改变了。但是,如果指针指向的不是常量,那么你仍然可以通过这个指针修改指向的数据。

    在C/C++中,指针常量的声明如下:

    int *const ptr = &someVariable;

    这里ptr必须在声明时初始化,并且以后不能再指向其他任何地址。但是,ptr所指向的int类型的数据可以通过ptr来修改。

因此,核心区别在于:

  • 常量指针主要限制通过这个指针改变所指向的数据,但允许改变指针指向的地址。
  • 指针常量主要限制改变指针所存储的地址,但允许通过这个指针改变所指向的数据(除非它同时也是一个常量指针,下文将说明)。

还有一种情况是两者结合使用,创建一个指向常量数据的固定指针(即指针的地址和它指向的数据都不能改变):

const int *const ptr = &someConstantVariable;

在这种声明中,ptr是一个指针常量,同时指向一个整型常量,因此无法修改ptr的值(地址),也不能通过ptr来修改其指向的数据。