因此,如果我在下面有这行代码,它将返回错误,如下所示。
string beads = "example";
if (beads[0] == "w")
./beads.cpp:19:15: error: comparison between pointer and integer ('int' and 'const char *')
if (beads[0] == "w") {
~~~~~~~~ ^ ~~~
但是,如果我将语句更改为下面的语句,一切都运行良好。那是为什么?
if (beads[0] == *"w")
答案 0 :(得分:2)
由于beads
是std::string
,beads[0]
是char
。因此,您需要将其与'w'
(带单引号),char
常量,而不是"w"
(字符串文字)进行比较。
您的其他代码段
if (beads[0] == *"w")
是正确的,但效率低且违反直觉。取消引用字符串文字与获取其首字母相同,因此它与
相同if (beads[0] == "w"[0])
它编译,但它不如
if (beads[0] == 'w')
使用字符文字'w'
。
答案 1 :(得分:2)
在C和C ++中,双引号表示字符串文字 - 字符串以空值终止并存储在内存中的某处。
"w"
原来是一些随机地址,你无法确定。
正如您所知,使用if (beads [0] == 'w')
,这是一个字符文字(注意单引号) - 一个数字,而不是一个指针。
答案 2 :(得分:1)
你可能想要
if (beads[0] == 'w')
这会将某些内容与角色进行比较。 *“* w”指向一些荒谬的位置。
答案 3 :(得分:1)
要进行字符比较,请使用'
代替"
。所以你应该使用
if (beads[0] == 'w')
而不是
if (beads[0] == "w")
答案 4 :(得分:1)
修复您的代码,如下所示
if (beads[0] == 'w')
// ^ ^ ** NOTE the single quotes
您希望在此条件下与普通char
值进行比较。