黑马程序员技术交流社区

标题: 为什么是36 [打印本页]

作者: blz01003hm    时间: 2014-4-15 17:13
标题: 为什么是36
本帖最后由 blz01003hm 于 2014-4-15 17:33 编辑

#include<stdio.h>
int fun(int x,int y){
return x*y;
}

int main(void){
int k=5;
printf("%d",fun(k++,++k));
return 0;
}
作者: 周宇华    时间: 2014-4-15 17:29
printf("%d",fun(k++,++k)); //++k是执行这句语句前k的值+1,k++是执行这句语句之后再+1,于是在执行这句语句前k先+1=6,然后调用函数计算值是36,然后k再+1=7;
作者: blz01003hm    时间: 2014-4-15 17:32
周宇华 发表于 2014-4-15 17:29
printf("%d",fun(k++,++k)); //++k是执行这句语句前k的值+1,k++是执行这句语句之后再+1,于是在执行这句语 ...

明白了  我一直以为是42
作者: 星河鹭起    时间: 2014-4-15 17:37
LZ 应该不是36吧,应该是42吧。
printf("%d",fun(k++,++k));
首先k++,但是这k++还没有进行运算,因此这时左边为6,
++k,此时k已经为6了,然后自增1,所以右边是7。
因此是fun(6,7),最终结果是42.

不知道楼主的36是怎么来的:D
作者: blz01003hm    时间: 2014-4-15 17:49
星河鹭起 发表于 2014-4-15 17:37
LZ 应该不是36吧,应该是42吧。
printf("%d",fun(k++,++k));
首先k++,但是这k++还没有进行运算,因此这时 ...

你打一遍看看  运行结果是36
作者: 从┧靇┟开始    时间: 2014-4-15 18:17
我觉得 fun(k++,++k)是在一条语句里面,和 k++; ++k不是一样吧,后者是2条语句才会把前面的结果带入后面的k值  .

k++和++k运算结果都使自身+1~~

前者是先带入运算后自身+1,后者是先自身+1后把结果带入运算。


作者: 星河鹭起    时间: 2014-4-15 19:30
blz01003hm 发表于 2014-4-15 17:49
你打一遍看看  运行结果是36

为啥我算出来的一值都是42啊,而且在VC6.0中运算出来也是42.
作者: blz01003hm    时间: 2014-4-15 20:42
星河鹭起 发表于 2014-4-15 19:30
为啥我算出来的一值都是42啊,而且在VC6.0中运算出来也是42.

我没懂发图  我用的是codeblocks 是36
作者: 星河鹭起    时间: 2014-4-15 21:24
周宇华 发表于 2014-4-15 17:29
printf("%d",fun(k++,++k)); //++k是执行这句语句前k的值+1,k++是执行这句语句之后再+1,于是在执行这句语 ...

如果按照你的理解,那这个是从右往左执行的???
作者: 周宇华    时间: 2014-4-15 22:43
星河鹭起 发表于 2014-4-15 21:24
如果按照你的理解,那这个是从右往左执行的???

看错了,我以为是printf("%d",fun(++k,k++));这个是36;
printf("%d",fun(k++,++k));这个的话,我觉得是35吧;
个人理解。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2