我正在经历一个哈希函数并遇到一个条件,当一个'\ 0'(NIL)字符出现时,for循环
应该退出。
unsigned int hash_string (const char *s)
{
register unsigned int i;
for (i = 0; *s; s++) { // This for loop is supposed to end
// when a '\0' comes?
i *= 16777619;
i ^= *s;
}
return i;
}
据我所知,如果条件返回0
,C-Loop应该结束 。
然而,在这里,没有这样的条件,它仍然有效吗?
有人还能说出循环成功/失败的所有条件吗?
答案 0 :(得分:2)
null字符的值为0
,因此在您的示例中,如果*s
对应于字符串的空终止,则'\0'
将计算为零。
来自 5.2.1字符集
...所有位都设置为0的字节,称为空字符 存在于基本执行字符集中;它用于终止一个 字符串。
然后在 6.4.4.4字符常量
中12示例1构造{{1}}通常用于表示。{1}} 空字符。
答案 1 :(得分:1)
*s
取消引用s
指向的字符。
如果字符代码为0
,则循环中断并传递除0
以外的所有值。
\0
保证为0
,这就是为什么保证循环在遇到NUL字符时终止于字符串结尾。
在\0
中选择C
作为字符串终止的原因之一是使这样的结构成为可能。
答案 2 :(得分:1)
当*s
评估为0
或false
时,它们可以相互转换,循环结束。
实际上,字符\0
的整数表示形式为0
。所以它是一样的。