while (*p) p++; while (*++p) ; while (*p++)三種循環比較

經常會將如下三種循環混淆,做一下整理。

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++))

這樣理解可能比較方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章