经常会将如下三种循环混淆,做一下整理。
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++))
这样理解可能比较方便。