作为一个长期存在的程序员,我很清醒地意识到即使是简陋的for
循环也没有被完全理解。为什么以下程序会向控制台打印一个1
?我完全期望第一个循环也产生1
!使用-ansi
开关编译。
/* gcc installed version: 4:4.4.4-1ubuntu2 */
#include <stdio.h>
#define SIZE 2
int main()
{
int i;
int a[SIZE];
a[0]=0;
a[1]=1;
for(i=0; (i<SIZE) && (a[i]!=0); i++)
printf("%i\n",a[i]);
for(i=0; i<SIZE; i++)
if (a[i]!=0)
printf("%i\n",a[i]);
return 0;
}
答案 0 :(得分:1)
第一个循环相当于:
for(i=0; ; i++) {
if( !((i<SIZE) && (a[i]!=0)))
break;
printf("%i\n",a[i]);
}
答案 1 :(得分:0)
这是区别:
for(i=0; i<SIZE; i++)
if (a[i]!=0)
printf("%i\n",a[i]);
else
continue; // implicit in your version with the if statement
和此:
for(i=0; i<SIZE; i++)
if (a[i]!=0)
printf("%i\n",a[i]);
else
break; // equivalent of what the non if statement version does.
(归功于@ ta.speot.is实际发现问题,这只是一个解释)