char const 和 const char 有什么区别

作者:编程家 分类: c++ 时间:2025-07-17

char * const 和 const char * 的区别

在C语言中,char * const 和 const char * 是两种常见的指针类型,它们看起来很相似,但却有着微妙的区别。

1. char * const

char * const 是一个指针常量,它保证指针本身的值不可更改,但指针所指向的数据可以被修改。这意味着你可以修改指针所指向的数据,但不能修改指针本身。

下面是一个示例代码:

#include

int main() {

char str[] = "Hello";

char * const ptr = str;

printf("Before modification: %s\n", ptr);

// 修改指针所指向的数据

ptr[0] = 'h';

printf("After modification: %s\n", ptr);

// 编译错误,无法修改指针本身

// ptr = NULL;

return 0;

}

在上面的代码中,我们定义了一个指向字符数组的指针 ptr,并使用 char * const 来声明它。我们可以修改指针所指向的数据,例如将第一个字符从大写的 'H' 改为小写的 'h'。但是,如果尝试修改指针本身的值,比如将指针设置为 NULL,将会导致编译错误。

2. const char *

const char * 是一个指向常量的指针,它保证指针所指向的数据不可更改,但指针本身的值可以被修改。这意味着你不能修改指针所指向的数据,但可以修改指针本身。

下面是一个示例代码:

#include

int main() {

const char *str = "Hello";

str = "World"; // 修改指针本身的值

printf("%s\n", str);

// 编译错误,无法修改指针所指向的数据

// str[0] = 'h';

return 0;

}

在上面的代码中,我们定义了一个指向常量字符的指针 str,并使用 const char * 来声明它。我们可以修改指针本身的值,例如将指针指向另一个字符串 "World"。但是,如果尝试修改指针所指向的数据,比如将第一个字符改为小写的 'h',将会导致编译错误。

在C语言中,char * const 和 const char * 都是用来声明指针类型的关键字,但含义不同。char * const 声明的是一个指针常量,保证指针本身的值不可更改;而 const char * 声明的是一个指向常量的指针,保证指针所指向的数据不可更改。这两种指针类型在实际应用中有不同的用途,根据具体的需求选择合适的类型可以增强代码的可读性和安全性。