关于“for(a,b& c,d){...}”和“for(a,b,d)if(c){...}”之间的区别

时间:2012-09-21 23:26:08

标签: c for-loop

作为一个长期存在的程序员,我很清醒地意识到即使是简陋的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;      
}

2 个答案:

答案 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实际发现问题,这只是一个解释)