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;
}