【发布时间】:2015-03-26 02:42:15
【问题描述】:
char *p = 's';
它给出了错误
无法使用“
char”类型的右值初始化“char *”类型的变量
谁能给我解释一下?非常感谢。
【问题讨论】:
-
我是指针新手,只是做一些实验并尝试弄清楚它们。@LightnessRacesinOrbit
标签: c++
char *p = 's';
它给出了错误
无法使用“
char”类型的右值初始化“char *”类型的变量
谁能给我解释一下?非常感谢。
【问题讨论】:
标签: 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 和/或 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 下的一个重要原因。这是一种强大的技术
【讨论】:
你犯了一个错误。您应该使用双引号 (") 而不是单引号 (')。
通常,'s' 表示字符文字,它被评估为类型 char。
虽然您的 p 是 char 类型指针 (char*),但初始化不起作用。
使用"s" 获取字符指针。这不是给你一个const char *,你可以将它输入到char*。
enter code here
char* p = (char*)"s";
或
const char* p = "s"
【讨论】:
char*。
这是因为's' 确实是char 类型。您需要以下其中一项:
char p = 's';
const char *p = "s";
如果您真的只想操作单个字符,请使用第一个。
如果需要 C 风格的字符串,请使用第二个。
【讨论】: