不明白这个for循环是如何工作的

hao*_*ark 3 c

有人可以解释这个循环如何工作?整个函数用于确定散列中放置某些字符串的位置,代码如下:

//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"位置?

Kyu*_*rem 6

在C中,字符和整数隐式转换为布尔值为:0 - false,非零 - true;

所以for(; *str; str++)迭代直到*str为零.(或零)

str是指向字符数组的指针.str++将此指针递增以指向数组中的下一个元素,从而指向字符串中的下一个字符.

因此,而不是索引索引.你正在移动指针.