2014-11-23 54 views
0

当我注释语句2和3时,i的值为2,但当我不注册时,i变为3。为什么?这个输出背后的过程是什么?

#include <stdio.h> 
int main() 
{ 
    int a[5]={5,1,15,20,25}; 
    int i,j,k=1,m; 
    i=++a[1]; //Statement 1    
    j=a[1]++; //Statement 2 
    m=a[i++]; //Statement 3 

    printf("%d %d %d",i,j,m); 
    return 0; 
} 
+2

因为与声明2 + 3,it's不同的代码?你有什么不明白? – deviantfan 2014-11-23 22:07:42

+4

因为语句3增加'i'。 – 2014-11-23 22:08:18

+3

尝试解释为什么你期望你期望的是什么 – 2014-11-23 22:08:31

回答

0

在声明3,你的代码是递增的i值:

m = a[i++]; 

这种情况很容易注意到的是你打破它为以下两行:

m = a[i]; 
i++; 

注意:顺序很重要!由于这是后增量(i++,而不是++i),所以首先使用i的值,然后递增。

+0

我明白了,我学到的教训是我先使用然后递增。 – 2014-11-23 22:30:25

+0

in j = a [1] ++,a [1]先被赋值,然后递增或先递增,然后赋值为 – 2014-11-23 22:43:45

+0

'j = a [1] ++;'与'j = a [ 1];',后面跟着'a [1] ++;'。 – 2014-11-23 23:35:26

0

m=a[i++]导致i由一个递增。它是i++部分,增量为i

+0

我想我知道了,但是m的输出结果应该是20,但输出结果显示为15或稍后会递增,请解释一下过程? – 2014-11-23 22:18:31

+0

是的,稍后会递增。 'i ++'使用'i',然后递增。 '++ i'增量,然后使用'i'。 – 2014-11-23 22:19:28

0

statement 1: i = a[1] + 1这意味着要添加1〜a[1]然后存储在我

i = 2 ; a[1] = 2' 

statement 2: j = a[1]++后该值,这意味着你statement 3: m = a[i + 1]这意味着之后加入1至a[1]2 + 1

j = 2; a[1] = 3; 

你将1加到索引值 我已经等于2,所以你做m = a[2+1]这就是15但既然你有i++该操作仍然预制件中加入i使i =4

m = 15; i = 4; thus a[i] = 20