指针常量与常量指针区别

参考回答

指针常量const pointer)和常量指针pointer to const)是 C++ 中常见的指针类型,它们的区别主要体现在指针本身是否可以修改以及指针指向的内容是否可以修改。

  1. 指针常量const pointer):指针常量是指指针本身是常量,不能改变指向的地址,但可以通过指针修改它所指向的内容。
    • 声明形式:类型 * const 指针名
    • const 修饰的是指针本身,指针的值(即指针指向的内存地址)不能改变。
  2. 常量指针pointer to const):常量指针是指指针指向的内容是常量,不能修改指向的内容,但指针本身可以指向不同的地址。
    • 声明形式:const 类型 * 指针名
    • const 修饰的是指针指向的内容,指针的值可以改变,但通过指针不能修改它指向的数据。

详细讲解与拓展

  1. 指针常量

    定义

    • const 修饰的是指针本身,意味着指针的地址(即指向的内存位置)不能修改,但指针所指向的内容可以修改。

    示例

    int x = 10;
    int y = 20;
    int* const ptr = &x;  // ptr 是指针常量
    *ptr = 15;            // 可以修改 ptr 指向的内容
    // ptr = &y;          // 错误:指针常量 ptr 不能改变指向的地址
    

    在这个例子中,ptr 是一个指向 int 类型的常量指针,它一旦指向 x,就不能再指向其他地址,但是可以通过它修改 x 的值。

  2. 常量指针

    定义

    • const 修饰的是指针指向的内容,意味着指针所指向的值不可修改,但指针本身可以修改,指向不同的地址。

    示例

    int x = 10;
    int y = 20;
    const int* ptr = &x;  // ptr 是常量指针
    // *ptr = 15;          // 错误:不能修改 ptr 指向的内容
    ptr = &y;             // 可以改变指针的地址
    

    在这个例子中,ptr 是一个常量指针,它可以指向不同的地址(如 &x&y),但是不能通过 ptr 修改指向的值。

  3. 结合 const 的使用

  • 指针常量:指针的地址不可改变,但数据可以修改。
  • 常量指针:指针所指向的数据不可修改,但指针的地址可以改变。
  1. 总结
  • 指针常量int* const ptr):

    • const 修饰指针本身,指针不能改变指向的地址,但可以修改指向的数据。
  • 常量指针const int* ptrint const* ptr):
    • const 修饰指针指向的数据,数据不能修改,但指针可以指向不同的地址。

总结

  • 指针常量指的是指针本身是常量,指针指向的地址不可改变,但指针所指向的值可以修改。
  • 常量指针指的是指针指向的内容是常量,指针本身可以指向不同的地址,但指向的值不能修改。

发表评论

后才能评论