有什么区别
char* name
指向一个常量字符串字面量,和
const char* name
有什么区别
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是一个指向不可变字符/字符串的不可变指针。