while (*p) p++; while (*++p) ; while (*p++)三种循环比较

来源:互联网 发布:上海大学财务网络系统 编辑:程序博客网 时间:2024/05/05 02:48

经常会将如下三种循环混淆,做一下整理。

while (*p) p++;
while (*++p) ;
while (*p++) ;

为了探究这三种中循环的奥秘,我假设如下的场景,假定 p 的地址开始于0x8000.

Address         0x00 0x01 0x02 0x03-------         ---- ---- ---- ----0x8000           'a'  'b'  'c'   00x8004           ...

第一种循环:

1.  *p = 'a'2.  p = 0x80013.  *p = 'b'4.  p = 0x80025.  *p = 'c'6.  p = 0x80037.  *p = 08.  end loop

第二种循环:

1.  p = 0x80012.  *p = 'b'3.  p = 0x80024.  *p = 'c'5.  p = 0x80036.  *p = 07.  end loop

第三种循环

1.  *p = 'a'2.  p = 0x80013.  *p = 'b'4.  p = 0x80025.  *p = 'c'6.  p = 0x80037.  *p = 0;8.  p = 0x80049.  end loop

在后两种情况下,我们可以这样来看:

while (*(++p)) ;  while (*(p++))

这样理解可能比较方便。

0 0