使用while(str[i] != '\0')和while (str[i])的表达式之间的区别

5

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

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

while (str[i])

其中,str 的类型为 char*,而 i 是一个整数。


第一个是自我记录的代码,意思是“当字符不是空终止符时”,第二个可以表示这个意思,也可以表示“这是一些无意义的东西,因为我实际上想要获取项目的地址并与null进行比较”。 - Lundin
1个回答

11
事实上并没有区别。任何计算结果为非零值的表达式都被视为逻辑真表达式,而计算结果为0的表达式被视为逻辑假表达式。
来自C标准(6.8.5 迭代语句):
一个迭代语句会使得被称作循环体的语句重复执行,直到控制表达式比较为0。无论循环体是从迭代语句中进入还是通过跳转进入,循环仍将执行。
注意在C中,带有等于运算符的表达式的值只能是1或0。
因此,如果关系成立,表达式`str[i] != '\0'`会产生1(非零值),否则会产生-0。
在C++中,这种表达式的类型是`bool`,它的值要么是true,要么是false。
来自C++14标准(4.12 布尔转换):
算术、未加限定的枚举、指针或指向成员的prvalue可以转换为布尔类型的prvalue。零值、空指针值或空成员指针值转换为false;任何其他值转换为true。对于直接初始化(8.5),std::nullptr_t类型的prvalue可以转换为布尔类型的prvalue;结果值为false。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接