C++ 无法使用 'char' 类型的右值初始化 'char *' 类型的变量

C++ cannot initialize a variable of type 'char *' with an rvalue of type 'char'

char *p = 's';

报错

cannot initialize a variable of type 'char *' with an rvalue of type 'char'

谁能给我解释一下?非常感谢。

因为's'确实是char类型。您需要以下其中一项:

char  p = 's';
const char *p = "s";

如果您真的只想操纵单个字符,请使用第一个。

如果您想要 C 风格的字符串,请使用第二个。

p 是一个指针,类型为 char*'s'char 类型的字符文字。您不能从字符初始化指针。

也许您希望 p 是单个字符:

char p = 's';

或者您可能希望它指向包含字符 's':

的字符串
char const *p = "s";  // Must be const, since string literals are constant

感谢你的编译器。这可能在 DOS 中起作用并导致你非常头疼。

你知道指针是内存地址吗?这是问题的一部分。 's' 可以在许多 C and/or C++ 编译器中转换为数字。查看一个 ASCII table

char *p = 's';可以从字面上设置它 p 内存地址 0x73,或者 OS 声明内存地址为 0x73 的任何内容。编译器将 "You can't do that!"

在某些形式的 DOS 和正确的 C 编译器(没有 OS 保护)中,您实际上可以这样做并查看 into/change 存储在内存地址 0x73 的任何内容。请参阅 http://webspace.webring.com/people/su/um_11214/vga.html 了解原因。

您实际上可以直接使用指针在 DOS 中乱用您的视频卡的 RAM。这也是为什么在Windows的早期,很多游戏还是为了DOS出来的一个很大的原因。这是一个强大的技术

你弄错了。您应该使用双引号 (") 而不是单引号 (')。 通常,'s' 表示字符文字,它被计算为类型 char.

而你的 p 是一个 char 类型的指针(char*)初始化不起作用。

使用"s"获取字符指针。不是那个给你一个 const char * 你可以输入大小写到 char*.

enter code here
char* p = (char*)"s";

const char* p = "s"