1、const char
const char
语法表示“常量字符”,即一个字符常量。
#include <stdio.h> int main() { const char *ptr = "Hello, world!"; while (*ptr != '\0') { // 当指针未指向字符串的结束符 putchar(*ptr); // 打印当前字符 ptr++; // 移动到下一个字符 } putchar('\n'); return 0; }
2、char const
char const
是一种等价的表达方式,表示“字符常量”。在这种写法中,const
仍然修饰 char
,但它的位置不同。
#include <stdio.h> int main() { // 定义一个指向字符串常量的指针 char const *ptr = "Hello, world!"; // 打印字符串 printf("%s\n", ptr); // 遍历字符串并逐字符打印 printf("逐字符输出:\n"); for (const char *p = ptr; *p != '\0'; ++p) { printf("%c\n", *p); } // 尝试修改字符串内容(编译器通常会报错或运行时引发错误) // *ptr = 'h'; // 错误:无法修改字符串常量 return 0; }
3、const char和char const区别
const char
和 char const
在语法上位置不同。前者是将 const
应用到 char
类型,而后者则是将 const
应用到指针的值。它们的含义完全相同,指向一个不可修改的字符。无论是 const char *
还是 char const *
,它们都表示指向常量字符的指针。两者在语法上是等价的,只是 const
放置的位置不同,它们都表示指向常量字符的指针。
#include <stdio.h> int main() { // const char* 和 char const* 的示例 const char* str1 = "Hello, World!"; // str1 指向一个常量字符串 char const* str2 = "Hello, C!"; // 与 str1 的定义等价 // *str1 和 *str2 的内容不能被修改 // *str1 = 'h'; // 错误:尝试修改只读内存中的值 str1 = "New String"; // 合法:str1 可以指向其他字符串 str2 = "Another String"; // 合法:str2 可以指向其他字符串 printf("str1: %s\n", str1); printf("str2: %s\n", str2); // char* const 的示例 char buffer1[] = "Mutable String"; char buffer2[] = "Another Mutable"; char* const ptr = buffer1; // ptr 是常量指针,不能指向其他字符串 // ptr = buffer2; // 错误:ptr 是常量指针,不能重新赋值 ptr[0] = 'm'; // 合法:可以修改 ptr 指向的内容 printf("Modified buffer1: %s\n", buffer1); // const char* const 的示例 const char* const const_ptr = "Constant String"; // const_ptr = buffer1; // 错误:const_ptr 是常量指针,不能重新赋值 // *const_ptr = 'C'; // 错误:const_ptr 指向的内容不能修改 printf("const_ptr: %s\n", const_ptr); return 0; }