printArrayWithoutLength(char str [])
{
for(int i=0;str[i];i++)
cout<< str[i]<< endl;
}
为什么以上工作?我没有在长度上使用布尔检查。
答案 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。
否则,如果数组不包含字符串,则函数的行为未定义。