以下3个有什么区别
char * const p; //常量指针,p 的值不可以修改
char const * p;//指向常量的指针,指向的常量值不可以改
const char *p; //和 char const *p
在 C/C++ 中,const
关键字的使用可以让我们指定指针和它指向的数据的可修改性。你提到的三个声明的区别主要体现在指针的性质和指向的数据的可修改性上。下面是对每个声明的详细解释:
1. char * const p;
- 含义:
p
是一个常量指针,它指向char
类型的变量。 - 特性:
p
的值(即指针指向的地址)不可更改。你不能使p
指向另一个地址。- 但
p
指向的数据(即*p
)是可以修改的。
- 示例:
char a = 'A'; char b = 'B'; char * const p = &a; // p 是一个常量指针 *p = 'C'; // 合法,修改了 p 指向的数据 // p = &b; // 错误,不能修改 p 的指向
2. char const * p;
- 含义:
p
是一个指向常量char
的指针。 - 特性:
p
的值(指针指向的地址)是可以更改的。你可以使p
指向不同的char
变量。- 但
p
指向的数据(即*p
)不可修改。
- 示例:
char a = 'A'; char b = 'B'; const char * p = &a; // p 是一个指向常量的指针 // *p = 'C'; // 错误,不能修改 p 指向的数据 p = &b; // 合法,可以改变 p 的指向
3. const char *p;
- 含义:与
char const * p;
相同,p
是一个指向常量char
的指针。 - 特性:
- 行为与
char const * p;
完全相同。 - 你可以自由地将它们视为同义词。
- 行为与
总结对比
声明 | 指针的可变性 | 指向数据的可变性 |
---|---|---|
char * const p; | 不可更改(常量指针) | 可修改 |
char const * p; | 可更改 | 不可修改(指向常量) |
const char * p; | 可更改 | 不可修改(指向常量) |
总结
- 使用
const
关键字可以有效地控制指针和指向数据的可修改性。理解这些区别可以帮助你更好地管理内存和保护数据不被意外修改。