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

时间:2014-09-13 17:33:51

标签: c++

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

为什么以上工作?我没有在长度上使用布尔检查。

3 个答案:

答案 0 :(得分:2)

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

!=

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

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

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

当然,这仅适用于以nul-characters(值为零的字符)终止的传统C风格字符串。还有其他方法可以存储字符串,如果字符串实际上没有以零字符终止,那么这些代码将以任何形式自然不起作用。

答案 1 :(得分:0)

str[i]写为for的条件表达式等同于str[i] != '\0'(您的字符串应为空终止)。当str[i]变为\0时,循环将终止。

答案 2 :(得分:0)

是否具有此功能(不带返回类型)

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。 零   转换value,null指针值或null成员指针值   为false; 任何其他值都转换为true。

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