A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© blz01003hm 高级黑马   /  2014-4-15 17:13  /  1309 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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;
}

评分

参与人数 1黑马币 +1 收起 理由
jing迪 + 1

查看全部评分

9 个回复

正序浏览
星河鹭起 发表于 2014-4-15 21:24
如果按照你的理解,那这个是从右往左执行的???

看错了,我以为是printf("%d",fun(++k,k++));这个是36;
printf("%d",fun(k++,++k));这个的话,我觉得是35吧;
个人理解。
回复 使用道具 举报
周宇华 发表于 2014-4-15 17:29
printf("%d",fun(k++,++k)); //++k是执行这句语句前k的值+1,k++是执行这句语句之后再+1,于是在执行这句语 ...

如果按照你的理解,那这个是从右往左执行的???
回复 使用道具 举报
星河鹭起 发表于 2014-4-15 19:30
为啥我算出来的一值都是42啊,而且在VC6.0中运算出来也是42.

我没懂发图  我用的是codeblocks 是36
回复 使用道具 举报
blz01003hm 发表于 2014-4-15 17:49
你打一遍看看  运行结果是36

为啥我算出来的一值都是42啊,而且在VC6.0中运算出来也是42.
回复 使用道具 举报
我觉得 fun(k++,++k)是在一条语句里面,和 k++; ++k不是一样吧,后者是2条语句才会把前面的结果带入后面的k值  .

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

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

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
星河鹭起 发表于 2014-4-15 17:37
LZ 应该不是36吧,应该是42吧。
printf("%d",fun(k++,++k));
首先k++,但是这k++还没有进行运算,因此这时 ...

你打一遍看看  运行结果是36
回复 使用道具 举报
LZ 应该不是36吧,应该是42吧。
printf("%d",fun(k++,++k));
首先k++,但是这k++还没有进行运算,因此这时左边为6,
++k,此时k已经为6了,然后自增1,所以右边是7。
因此是fun(6,7),最终结果是42.

不知道楼主的36是怎么来的:D

评分

参与人数 1黑马币 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
周宇华 发表于 2014-4-15 17:29
printf("%d",fun(k++,++k)); //++k是执行这句语句前k的值+1,k++是执行这句语句之后再+1,于是在执行这句语 ...

明白了  我一直以为是42
回复 使用道具 举报
printf("%d",fun(k++,++k)); //++k是执行这句语句前k的值+1,k++是执行这句语句之后再+1,于是在执行这句语句前k先+1=6,然后调用函数计算值是36,然后k再+1=7;

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马