Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
次のコードでは:
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; }
式が最初に評価され、次にインクリメントされることは私の理解です。
while ループの最後のステップ when を考えてみましょう*p = '\0'。
*p = '\0'
最初のコードでは:
while(*p++ != '\0');
p1 つのインクリメントと、 の背後にある要素へのポインタを取得します'\0'。
p
'\0'
2番目のコード:
while(*p != '\0') p++;
*p != '\0'は true ではないため、while ループの終了時に、p はインクリメントを取得しません。pへのポインタ'\0'。
*p != '\0'