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

时间:2015-03-26 02:42:15

标签: c++

char *p = 's';

它发出错误

  

无法初始化类型' char *'使用' char'

类型的右值

任何人都可以向我解释一下吗?非常感谢。

4 个答案:

答案 0 :(得分:7)

p是一个char*类型的指针。 's'char类型的字符文字。你不能初始化一个角色的指针。

也许你希望p成为一个角色:

char p = 's';

或者您希望它指向包含字符's'的字符串:

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

答案 1 :(得分:2)

感谢您的编译器。这可能在DOS中起作用,并引起了很大的麻烦。

你知道指针是如何存储地址的吗?这是问题的一部分。 ' S'可以在许多C和/或C ++编译器中转换为数字。请参阅ASCII表

char * p =' s&#39 ;;可以将字面设置为内存地址0x73,或者操作系统将内存地址声明为0x73。编译器正在进行#34;你不能这样做!"

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

你实际上只需使用指针就可以直接在DOS中乱丢你的视频卡的RAM。这是一个很大的原因,在Windows的早期,许多游戏仍然出现在DOS上。这是一项强大的技术

答案 2 :(得分:1)

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

当您的pchar类型指针(char*)时,初始化无法正常工作。

使用"s"获取char指针。这不是为您提供const char *,您可以将其输入char*

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

const char* p = "s"

答案 3 :(得分:0)

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

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

如果你真的只想操纵一个角色,请使用第一个。

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