指针常量与常量指针区别
参考回答
指针常量(const
pointer)和常量指针(pointer to const
)是 C++ 中常见的指针类型,它们的区别主要体现在指针本身是否可以修改以及指针指向的内容是否可以修改。
- 指针常量(
const pointer
):指针常量是指指针本身是常量,不能改变指向的地址,但可以通过指针修改它所指向的内容。- 声明形式:
类型 * const 指针名
。 const
修饰的是指针本身,指针的值(即指针指向的内存地址)不能改变。
- 声明形式:
- 常量指针(
pointer to const
):常量指针是指指针指向的内容是常量,不能修改指向的内容,但指针本身可以指向不同的地址。- 声明形式:
const 类型 * 指针名
。 const
修饰的是指针指向的内容,指针的值可以改变,但通过指针不能修改它指向的数据。
- 声明形式:
详细讲解与拓展
- 指针常量
定义:
const
修饰的是指针本身,意味着指针的地址(即指向的内存位置)不能修改,但指针所指向的内容可以修改。
示例:
int x = 10; int y = 20; int* const ptr = &x; // ptr 是指针常量 *ptr = 15; // 可以修改 ptr 指向的内容 // ptr = &y; // 错误:指针常量 ptr 不能改变指向的地址
在这个例子中,
ptr
是一个指向int
类型的常量指针,它一旦指向x
,就不能再指向其他地址,但是可以通过它修改x
的值。 -
常量指针
定义:
const
修饰的是指针指向的内容,意味着指针所指向的值不可修改,但指针本身可以修改,指向不同的地址。
示例:
int x = 10; int y = 20; const int* ptr = &x; // ptr 是常量指针 // *ptr = 15; // 错误:不能修改 ptr 指向的内容 ptr = &y; // 可以改变指针的地址
在这个例子中,
ptr
是一个常量指针,它可以指向不同的地址(如&x
或&y
),但是不能通过ptr
修改指向的值。 -
结合
const
的使用
- 指针常量:指针的地址不可改变,但数据可以修改。
- 常量指针:指针所指向的数据不可修改,但指针的地址可以改变。
- 总结
-
指针常量(
int* const ptr
):const
修饰指针本身,指针不能改变指向的地址,但可以修改指向的数据。
- 常量指针(
const int* ptr
或int const* ptr
):const
修饰指针指向的数据,数据不能修改,但指针可以指向不同的地址。
总结
- 指针常量指的是指针本身是常量,指针指向的地址不可改变,但指针所指向的值可以修改。
- 常量指针指的是指针指向的内容是常量,指针本身可以指向不同的地址,但指向的值不能修改。