以下代码
#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是什么意思?
- 试图(试图摆脱怀疑:))
如果减法的结果为零,则为test假; 否则就是真的.
任何数值类型,枚举类型或指针的值都可以转换为布尔值; 如果值为零(或指针为null),则结果为false; 否则结果是真的.
整数类型,浮点类型和指针类型都可以转换为bool.对于所有这些,值0将转换为false,非零值将转换为true.
因此,如果s2 - s1计算结果为0,test则为false.否则,test是的.
由于s1和s2是指针,s2 - s1它们之间给出了区别(地址相隔多远).如果它们指向相同的地址,则差值将为0.如果它们指向不同的地址,则结果将为非零.所以,真正意义test表示为是否s1和s2点到不同的地址.s1 != s2会得到完全相同的结果,可能会更有意义.
然而,鉴于该值s1和s2硬编码,并保证指向不同的地址,测试并没有真正使任何意义.它可能在另一个程序中是有意义的 - 特别是在哪里s1和s2正在被传递到一个函数中,你无法提前知道它们是否真的相同.