提问人:Romain BOBOE 提问时间:2/2/2022 最后编辑:ouflakRomain BOBOE 更新时间:2/22/2022 访问量:601
表达式的区别:while(str[i] != '\0') 和 while (str[i])
Difference between expression: while(str[i] != '\0') and while (str[i])
问:
在检查我们是否到达字符串末尾时,这两个表达式之间有什么区别吗?
while(str[i] != '\0')
和
while (str[i])
其中 has 类型 和 是整数。str
char*
i
答:
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。
评论