const char *

The trick is to read the declaration backwards (right-to-left):

const int a = 1; // read as "a is an integer which is constant"
int const a = 1; // read as "a is a constant integer"

Both are the same thing. Therefore:

a = 2; // Can't do because a is constant

The reading backwards trick especially comes in handy when you're dealing with more complex declarations such as:

const char *s;      // read as "s is a pointer to a char that is constant"
char c;
char *const t = &c; // read as "t is a constant pointer to a char"

*s = 'A'; // Can't do because the char is constant
s++;      // Can do because the pointer isn't constant
*t = 'A'; // Can do because the char isn't constant
t++;      // Can't do because the pointer is constant
### C 和 C++ 中 `const char*` 的用法解释 #### 定义与含义 在C和C++编程语言中,`const char*` 是一种指向字符常量的指针。这意味着该指针可以用来访问字符串字面量或其他不可修改的数据。 - 当声明为 `const char *str` 或者 `char const *str` 时,表示通过这个指针所指向的内容是只读的;即不允许程序改变由 `str` 所指向位置处存储的实际数据[^1]。 ```cpp // 正确的方式初始化并使用 const char* const char *message = "Hello, world!"; printf("%s\n", message); // 输出 Hello, world! // 尝试更改消息内容会引发编译错误 // *message = 'h'; // 错误:不能修改常量数据 ``` #### 常见应用场景 这种类型的指针通常用于处理不需要被修改的字符串参数传递给函数的情况,在这样的场景下能有效防止意外地篡改输入参数中的原始文本串。 另外值得注意的是,虽然可以通过重新赋值让同一个 `const char*` 变量指向不同的地址,但是依旧无法经由此路径去改动目标内存区域内的具体数值。 ```cpp void printString(const char *text) { printf("The string is %s.\n", text); } int main() { const char *greeting = "Good morning"; printString(greeting); greeting = "Have a nice day"; // 合法操作:只是改变了指针本身的目标 printString(greeting); return 0; } ``` #### 结合其他限定符 有时还会看到像 `char * const ptr = str;` 这样的形式,这里则是固定了指针本身的值使其不能再指向别的地方,而允许对它当前指向的对象进行写入操作。对于完全锁定指针及其指向对象的情形,则可采用如下方式: ```cpp const char * const fixedPtr = "Unchangeable String"; /*fixedPtr = "Another String";*/ // 不合法:试图重定向已固定的指针 //*fixedPtr = 'X'; // 不合法:尝试修改常量数据 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值