有人可以解释这个循环如何工作?整个函数用于确定散列中放置某些字符串的位置,代码如下:
//determine string location in hash
int hash(char* str)
{
int size = 100;
int sum;
for(; *str; str++)
sum += *str;
return sum % size;
}
Run Code Online (Sandbox Code Playgroud)
它似乎逐字符遍历字符串,直到它达到null为止,但为什么简单的*str作为条件?为什么str ++移动到下一个字符,不应该是这样的:*(str + i)其中i随每个循环递增并根据*str地址在内存中移动"i"位置?
在C中,字符和整数隐式转换为布尔值为:0 - false,非零 - true;
所以for(; *str; str++)迭代直到*str为零.(或零)
str是指向字符数组的指针.str++将此指针递增以指向数组中的下一个元素,从而指向字符串中的下一个字符.
因此,而不是索引索引.你正在移动指针.