这种情况如何?

Ame*_*een 0 c++ pointers

我有以下函数,它是Trie结构实现的一部分:

int alpha_char_strlen (const AlphaChar *str) {
    const AlphaChar *p;
    for (p = str; *p; p++) ;
    return p - str;
Run Code Online (Sandbox Code Playgroud)

}

任何人都可以帮助我解释for循环的条件是如何保持的,在这种情况下究竟是什么条件?
注意:AlphaChar只是一个带unsigned int类型的typedef,该函数计算AlphaChar字符.

Ker*_* SB 8

条件*p*p != 0(如果*p是原始类型)相同.也就是说,你继续递增指针p直到它指向零.换句话说,您将其str视为指向零终止数组的指针.

  • 只有当`AlphaChar`解析为数字或指针类型时,这个答案才是正确的.如果它解析为一个类,那么可能会发生任何数量的事情:`operator void*()`或`operator bool()`或[`operator unspecified_bool_type()`]的结果(http://www.artima. com/cppsource/safebool.html)可能会被测试.最终,*某些东西*会被测试,但它比'*p!= 0`更复杂一些. (2认同)