【问题标题】:C++ cannot initialize a variable of type 'char *' with an rvalue of type 'char'C++ 无法使用“char”类型的右值初始化“char *”类型的变量
【发布时间】:2015-03-26 02:42:15
【问题描述】:
char *p = 's';

它给出了错误

无法使用“char”类型的右值初始化“char *”类型的变量

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

【问题讨论】:

  • 我是指针新手,只是做一些实验并尝试弄清楚它们。@LightnessRacesinOrbit

标签: c++


【解决方案1】:

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

也许您希望 p 成为单个字符:

char p = 's';

或者你可能希望它指向一个包含字符's'的字符串:

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

【讨论】:

    【解决方案2】:

    感谢您的编译器。这可能在 DOS 中有效,并让您非常头疼。

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

    char *p = 's';可以从字面上将其设置为 p 内存地址 0x73,或者操作系统将内存地址声明为 0x73。编译器会说“你不能那样做!”

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

    您实际上可以通过使用指针直接在 DOS 中弄乱视频卡的 RAM。这就是为什么在 Windows 早期,许多游戏仍然出现在 DOS 下的一个重要原因。这是一种强大的技术

    【讨论】:

      【解决方案3】:

      你犯了一个错误。您应该使用双引号 (") 而不是单引号 (')。 通常,'s' 表示字符文字,它被评估为类型 char

      虽然您的 pchar 类型指针 (char*),但初始化不起作用。

      使用"s" 获取字符指针。这不是给你一个const char *,你可以将它输入到char*

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

      const char* p = "s"
      

      【讨论】:

      • 演员阵容真的是个坏建议。
      • @BaummitAugen 您建议如何避免这种演员阵容。如何分配该 const char*
      • 我不明白你的问题。您可以通过不使用它来避免这种转换,并且您不会将字符串文字分配给char*
      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        • 1970-01-01
        • 2019-10-05
        相关资源
        最近更新 更多