經常會將如下三種循環混淆,做一下整理。
while (*p) p++;
while (*++p) ;
while (*p++) ;
爲了探究這三種中循環的奧祕,我假設如下的場景,假定 p 的地址開始於0x8000.
Address 0x00 0x01 0x02 0x03
------- ---- ---- ---- ----
0x8000 'a' 'b' 'c' 0
0x8004 ...
第一種循環:
1. *p = 'a'
2. p = 0x8001
3. *p = 'b'
4. p = 0x8002
5. *p = 'c'
6. p = 0x8003
7. *p = 0
8. end loop
第二種循環:
1. p = 0x8001
2. *p = 'b'
3. p = 0x8002
4. *p = 'c'
5. p = 0x8003
6. *p = 0
7. end loop
第三種循環
1. *p = 'a'
2. p = 0x8001
3. *p = 'b'
4. p = 0x8002
5. *p = 'c'
6. p = 0x8003
7. *p = 0;
8. p = 0x8004
9. end loop
在後兩種情況下,我們可以這樣來看:
while (*(++p)) ; while (*(p++))
這樣理解可能比較方便。