龙华中英文学校 怎么样:一个C语言的困惑,求高手帮忙解释一下

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/10 11:41:18
小第才开始学C语言,今天自学++i和i++时很困惑,请高手帮忙解释一下.
main()
{int i,j,k;
k=10;
i=k++;
j=++k;
printf("k=%d,i=%d,j=%d",k,i,j);
getch();
}

电脑给的结果是k=12 i=10 j=12
但是我觉得结果应该是k=10 i=11 j=11
不知道我这里理解出了什么问题,请高手指点,望稍微详细点,谢谢谢谢.
我先也觉得K=10但计算机给的结果却是12,想不明白

这个问题经常让初学者迷惑。
关键要搞清楚它的结合方向。i=k++的意思是先将10赋给i,然后再k++,得到k的值是11,接着++k是先自加,得到++k为12,然后再赋给j,即j=12。
总之,记住前加是先自加再赋值,后加则是先赋值再自加!

你还没理解自加运算的意义哈~我来解释

main()
{int i,j,k;
k=10;
i=k++; //从这里开始,i的确是=10,但是这个时候k的值在赋给i后做了自加运算,也就是说在执行下个语句前k的值已经为11了。
j=++k; //值已经为11的k进行先增值再赋值的运算,先增值,所以k=12了,再赋值给j,这个时候j也等于12了。
printf("k=%d,i=%d,j=%d",k,i,j);
getch(); //这句是错的,有这句编译不通。
}

下面给你说一下,i=k++的分解,i=k++可以用两个表达式代替:
i=k;
k=k+1;
而j=++k可以用以下两个表达式代替:
k=k+1;
j=k;
注意增值和引用的顺序就可以了。

k肯定是10,因为k的初始值就为10,后边没有对K进行任何操作,你试试把最后一句getch()去掉,看看是不是你的结果
还有你的printf中差了两个,

就是应该是k=12 i=10 j=12 的

i=k++; --步骤:1,先把K的直给I,然后通过K++,K自加了1.变成11.

J=++K;---步骤:1,先执行++K.K的直变成了12.然后在把K的直给J.J变成了.12了.

我建议你还仔细看看书的关于自增,和自减的运算方面的知识吧.

i++和++i是自增自减运算符
i++先赋值再自加1
++i是自加再赋值

题中
int i,j,k;
k=10;
i=k++;
先把k=10赋值个i再自加1
k=11
j=++k;
k=11先自加一个在赋值个j
j=12

++的位置对结果有影响的。++在变量前是在本次运算步骤中就运算,而++在变量后是在此步骤后才运算赋值。

比如
i=k++;
k在这条语句中没有进行运算,而是在这句执行完了后才运算然后赋给k,所以表达式的右值是10,所以i=10。这句执行完了后k运算后的值被赋给k,k=11。


i=++k;
跟上面相反,k在这句中就进行了运算和赋值,k在上面已经进行了自加=11,所以这句k=k+1=12,赋给j=12。

所以最后的结果是12 10 12

我看了下你的问题主要在不知道++的作用,要去把++的定义仔细看下。

++的用处很多,最常见的在循环里面,稍不注意就会有意外的收获。。