const char*和char* const

本文详细解释了const char*和char*const两种指针类型的区别,前者为指向常量的指针,后者定义了指针常量。通过实例展示了如何正确使用这两种类型,并强调了它们在修改内存内容方面的不同限制。

const char*char* const

1、const char*

const char*类型是指向常量的指针,注意此时const所在的位置:在“*”的前面。constchar的前面或后面都是一样的,但通常将const放置在char的前面,对一个利用const char*类型定义的常量指针来说,不能修改其指向内存中的内容,但可以修改其指所指向的内存地址。const char*类型的使用方法如下:

char ch[5] = "lisi"

const char *pStr = ch; 

第二行定义了一个指向常量的指针变量:pStr然后用已定义的字符数据ch给这个变量赋值。相当于将这个数据的首地址赋给了这个变量,因为对于利用const char*类型定义的指向常量的指针变量,不能修改其指向的内存中的内容,但可以修改其本身的值,即变量所保存的内存地址,因此对于pStr来说,这个指针变量的值是可以修改的,而其指向的对象(即数据中的元素)被看做是常量,不能够被修改。

2、char* const

char* const类型定义的是一个指针常量,他的使用方法有

char ch[5] = "lisi"

char *const PSTR = ch; 
利用char* const类型定义了一个指针常量:pStr,然后同样用字符数组给这个指针常量赋值,相当于将字符数组的首地址赋给了指针常量

注意此时const的位置:在“*”的后面,但在所定义的指针名称的前面,这种定义形式表明定义了一个指针常量,要注意的是,对于指针常量,必须在其定义的同时赋值,指针常量表示指针本身是常量,因此对于pStr来说,其值是一个指针常量,是不能够修改的。

总结:

const char*类型的指针(指向常量的指针)其所指向的内容是常量,是不可以修改的,但其指针值是可以修改的。

但对于char* const类型的指针(常量指针)来说,它的地址是一个常量,也就是说,它的指针值是常量,不可以修改,但其指向的内容是可以修改的!

在 C/C++ 中,`const char *` `char * const` 的区别主要体现在 `const` 修饰符的作用对象不同,这决定了指针的指向或指向内容的可修改性。 ### `const char *`(等价于 `char const *`) - `const char *` 表示一个指向常量字符的指针,即指针所指向的内容不可被修改,但指针本身可以改变其指向的地址。 - 例如: ```cpp const char *p = "Hello"; p = "World"; // 合法,指针可以改变指向 // p[0] = 'h'; // 非法,编译器会报错,因为内容不可修改 ``` 上述代码中,`p` 可以指向不同的字符串常量,但不能通过 `p` 修改字符串的内容[^1]。 ### `char * const` - `char * const` 表示一个常量指针,即指针本身不能改变其指向的地址,但指针所指向的内容是可以修改的。 - 例如: ```cpp char str[] = "Hello"; char * const p = str; p[0] = 'h'; // 合法,内容可以修改 // p = "World"; // 非法,指针不能改变指向 ``` 在此情况下,`p` 一旦指向了 `str`,就不能再指向其他地址,但可以通过 `p` 修改 `str` 的内容[^1]。 ### 总结对比 | 类型 | 指针指向是否可变 | 指针指向内容是否可变 | |------------------|------------------|-----------------------| | `const char *` | 可变 | 不可变 | | `char * const` | 不可变 | 可变 | ### 示例代码 ```cpp #include <iostream> using namespace std; int main() { // const char * 示例 const char *p1 = "Hello"; p1 = "World"; // 合法 // p1[0] = 'h'; // 非法,编译报错 // char * const 示例 char str[] = "Hello"; char * const p2 = str; p2[0] = 'h'; // 合法 // p2 = "World"; // 非法,编译报错 cout << p1 << endl; cout << p2 << endl; return 0; } ``` ### `const char * const` - `const char * const` 表示一个指向常量字符的常量指针,即指针本身指针指向的内容都不能被修改。 - 例如: ```cpp const char * const p = "Hello"; // p = "World"; // 非法,指针不可改变指向 // p[0] = 'h'; // 非法,内容不可修改 ``` ### 示例代码 ```cpp #include <iostream> using namespace std; int main() { const char * const p = "Hello"; // p = "World"; // 非法 // p[0] = 'h'; // 非法 cout << p << endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值