C - 指针算术

时间:2013-07-14 05:22:10

标签: c pointers

在以下代码中:

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;
}

我的理解是表达式首先进行评估,然后递增。

3 个答案:

答案 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。