Str[i] 在 for 循环中自动进行布尔值检查

Str[i] auto boolean check in the for loop

本文关键字:检查 布尔值 循环 for Str      更新时间:2023-10-16
printArrayWithoutLength(char str [])
{
    for(int i=0;str[i];i++)
        cout<< str[i]<< endl;
}

为什么上述方法有效?我没有对长度使用布尔检查。

在 C 中,任何不是直接布尔表达式的条件(即布尔表达式以外的其他类型,不涉及比较运算符 [ ><==!= 等]( 将自动比较为不等于零,因此您可以将代码重写为:

for(int i=0;str[i] != 0;i++)

for(int i=0;str[i] != '';i++)

for(int i=0; 0 != str[i]; i++)

具有完全相同的结果和生成的完全相同的代码。只是或多或少地打字,根据对 C 或 C++ 的熟悉程度,您可能会发现阅读一个或多或少更容易。

当然,这仅适用于以 nul-字符(值为零的字符(结尾的传统 C 样式字符串。还有其他方法可以存储字符串,如果字符串实际上没有以零字符结尾,则此代码以任何形式自然不起作用。

>将str[i]写为 for 的条件表达式等效于 str[i] != ''(字符串应以 null 结尾(。当str[i]变得时,循环将终止。

此函数是否(不带返回类型(

printArrayWithoutLength(char str [])
{
    for(int i=0;str[i];i++)
        cout<< str[i]<< endl;
}

将工作或不工作取决于用作参数的数组包含的内容。如果它包含一个字符串,该字符串是以零结尾的字符序列,则此函数将起作用,因为在循环内部有条件

str[i]

如果 str[i] 的值对于某些 i,则等于 false

根据C++标准(4.12 布尔转换 [conv.bool](

1 算术、无作用域枚举、指针或指针的 prvalue 到 成员类型 可以转换为 bool 类型的 prvalue 值。零 转换值、空指针值或空成员指针值 为假;任何其他值都将转换为 true。

否则,如果数组不包含字符串,则函数的行为是未定义的。