3

次のコードでは:

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

式が最初に評価され、次にインクリメントされることは私の理解です。

4

3 に答える 3

2

while ループの最後のステップ when を考えてみましょう*p = '\0'

最初のコードでは:

while(*p++ != '\0');

p1 つのインクリメントと、 の背後にある要素へのポインタを取得します'\0'

2番目のコード:

while(*p != '\0') p++;

*p != '\0'は true ではないため、while ループの終了時に、p はインクリメントを取得しません。pへのポインタ'\0'

于 2013-07-14T08:08:14.413 に答える