在以下代码中:
int strlen(char *s){
char *p = s;
while(*p++ != '\0');
return p - s;
}
为什么上述评价与此不同:
int strlen(char *s){
char *p = s;
while(*p != '\0') p++;
return p - s;
}
我的理解是表达式首先进行评估,然后递增。
答案 0 :(得分:10)
p
条件是真还是假,第一个代码while()
中的都会递增。
在第二段代码中,p
仅在while
条件为真时才会递增。
答案 1 :(得分:2)
考虑*p = '\0'
时while循环的最后一步。
在1 st 代码中:
while(*p++ != '\0');
p
仍然会获得一个增量,并指向'\0'
后面的元素。
在2 nd 代码中:
while(*p != '\0') p++;
*p != '\0'
不正确,因此在循环结束时,p不会增加。指向p
的{{1}}指针。
答案 2 :(得分:0)
在第一种情况下: -
while(*p++ != '\0');
p将在评估表达式后立即递增,无论条件是真还是假,因为++
是条件表达式的一部分。
然而,在第二个: -
while(*p != '\0') p++;
首先检查条件,如果是,则只增加p。