char *p = 's';
它发出错误
无法初始化类型'
类型的右值char *
'使用'char
'
任何人都可以向我解释一下吗?非常感谢。
答案 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
。
当您的p
是char
类型指针(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风格的字符串,请使用第二个。