C ++ - 如果语句比较返回错误

时间:2014-05-22 01:39:17

标签: c++ if-statement syntax

因此,如果我在下面有这行代码,它将返回错误,如下所示。

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")

5 个答案:

答案 0 :(得分:2)

由于beadsstd::stringbeads[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值进行比较。