表达式的区别:while(str[i] != '\0') 和 while (str[i])

Difference between expression: while(str[i] != '\0') and while (str[i])

提问人:Romain BOBOE 提问时间:2/2/2022 最后编辑:ouflakRomain BOBOE 更新时间:2/22/2022 访问量:601

问:

在检查我们是否到达字符串末尾时,这两个表达式之间有什么区别吗?

while(str[i] != '\0') 

while (str[i])

其中 has 类型 和 是整数。strchar*i

C++ C WHILE 循环 表达式 相等

评论

0赞 Lundin 2/2/2022
第一个是自记录代码,意思是“虽然字符不是 null 终止符”,第二个可以表示,也可以表示“这是一些废话,因为我实际上打算获取项目的地址并与 null 进行比较”。

答:

11赞 Vlad from Moscow 2/2/2022 #1

事实上,没有区别。任何计算结果为非零值的表达式都被视为逻辑真表达式。计算结果为零的表达式被视为逻辑错误表达式。

来自 C 标准(6.8.5 迭代语句)

4 迭代语句导致称为循环体的语句为 重复执行,直到控制表达式比较等于 0. 无论循环体是从迭代语句输入还是通过跳转输入,都会发生重复。

请注意,在 C 中,具有相等运算符的表达式的值为 1 或 0。

因此,如果关系为 true,则表达式产生 1(非零值),否则产生 -0。str[i] != '\0'

在 C++ 中,此类表达式的类型为 ,其值为 true 或 false。bool

来自 C++ 14 标准(4.12 布尔转换)

1 算术、无作用域枚举、指针或指针的 prvalue to 成员类型可以转换为 bool 类型的 prValue。零 值、空指针值或空成员指针值被转换 为假;任何其他值都将转换为 true。为 direct-initialization (8.5),std::nullptr_t 类型的 prvalue 可以是 转换为 bool 类型的 prValue;结果值为 false。