有什么区别

char* name

指向一个常量字符串字面量,和

const char* name

当前回答

Char *是一个可变指针,指向一个可变字符/字符串。

Const char*是一个指向不可变字符/字符串的可变指针。不能更改此指针所指向的位置的内容。此外,当你尝试这样做时,编译器需要给出错误消息。出于同样的原因,不支持将const char*转换为char*。

Char * const是一个不可变指针(它不能指向任何其他位置),但它所指向的位置的内容是可变的。

Const char* Const是一个指向不可变字符/字符串的不可变指针。

其他回答

实际上,char* name不是一个指向常量的指针,而是一个指向变量的指针。你可能在说另一个问题。

char * const和const char *之间的区别是什么?

我想在这里补充一点,最新的编译器,例如VS 2022,不允许用字符串文字初始化char*。char* ptr = "Hello";当const char* ptr = "Hello"时抛出错误;是合法的。

在这两种情况下都不能修改字符串字面值,无论指向该字符串字面值的指针是声明为char *还是const char *。

然而,不同之处在于,如果指针是const char *,那么编译器必须在你试图修改指向值时给出诊断,但如果指针是char *,则不会。

如果你想,第一个你可以改变,第二个你不能。阅读有关const正确性的内容(有一些关于区别的很好的指南)。还有char const * name,你不能重新指向它。

Char *是一个可变指针,指向一个可变字符/字符串。

Const char*是一个指向不可变字符/字符串的可变指针。不能更改此指针所指向的位置的内容。此外,当你尝试这样做时,编译器需要给出错误消息。出于同样的原因,不支持将const char*转换为char*。

Char * const是一个不可变指针(它不能指向任何其他位置),但它所指向的位置的内容是可变的。

Const char* Const是一个指向不可变字符/字符串的不可变指针。