确定真/假

sil*_*ent 0 c++ gcc boolean

以下代码

#include <iostream>
using namespace std;

int main(){
    char greeting[50] = "goodmorning everyone";
    char *s1 = greeting;
    char *s2 = &greeting[7];

    bool test = s2-s1;

    cout << "s1 is: " << s1 << endl;
    cout << "s2 is: " << s2 << endl;
    if (test == true ){
        cout << "test is true and is: " << test << endl;
    }

    if (test == false){
        cout<< "test is false and is: " << test << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

s1 is: goodmorning everyone
s2 is: ning everyone
test is true and is: 1
Run Code Online (Sandbox Code Playgroud)

这条线bool test = s2-s1;实际评估的是什么?是字符串的长度吗?如果是这样,那么看到s2小于s1它应该是负正确的?,但输出是真的吗?

此外,如果我改变它,bool test = s1-s2;我仍然得到相同的结果.所以它的负面或正面是否无关紧要true?0时只有假?

s2-s1是什么意思?

- 试图(试图摆脱怀疑:))

Jam*_*lis 7

如果减法的结果为零,则为test假; 否则就是真的.

任何数值类型,枚举类型或指针的值都可以转换为布尔值; 如果值为零(或指针为null),则结果为false; 否则结果是真的.

  • @ sil3nt:它返回两个指针之间的差异.`s1`和`s2`只是指针.在这种情况下,`s2 - s1 = 7`因为`s2`指向char数组的第七个元素,而`s1`指向char数组的第0个元素(开头). (6认同)

Jon*_*vis 5

整数类型,浮点类型和指针类型都可以转换为bool.对于所有这些,值0将转换为false,非零值将转换为true.

因此,如果s2 - s1计算结果为0,test则为false.否则,test是的.

由于s1s2是指针,s2 - s1它们之间给出了区别(地址相隔多远).如果它们指向相同的地址,则差值将为0.如果它们指向不同的地址,则结果将为非零.所以,真正意义test表示为是否s1s2点到不同的地址.s1 != s2会得到完全相同的结果,可能会更有意义.

然而,鉴于该值s1s2硬编码,并保证指向不同的地址,测试并没有真正使任何意义.它可能在另一个程序中是有意义的 - 特别是在哪里s1s2正在被传递到一个函数中,你无法提前知道它们是否真的相同.