鱼C论坛

 找回密码
 立即注册
查看: 5988|回复: 46

被妹子问倒了

[复制链接]
发表于 2014-8-25 21:24:28 | 显示全部楼层 |阅读模式
2鱼币
#include "stdio.h"
void main()
{
int  x=1,y,z;
  y=(++x)*(++x);
    printf("%d",y);

}

为什么是9,不是6

最佳答案

查看完整内容

因为++x(其实就是变量 _ _X),指向的是同一个指针(地址)假设为1000:0000,那么一开始++x,那么1000:0000代表的数值就变2,然后++x,继续+1,变为3.此时这个地址代表的_ _x,进行x*x运算,算得9~~应该是这样。本人菜鸟~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 21:24:29 | 显示全部楼层
本帖最后由 wo940417 于 2014-8-26 22:05 编辑

因为++x(其实就是变量 _ _X),指向的是同一个指针(地址)假设为1000:0000,那么一开始++x,那么1000:0000代表的数值就变2,然后++x,继续+1,变为3.此时这个地址代表的_ _x,进行x*x运算,算得9~~应该是这样。本人菜鸟~

评分

参与人数 1鱼币 +1 收起 理由
iter_jsx + 1 正解,我觉得还是用汇编的观点解释比较好。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 21:29:56 | 显示全部楼层
第一次++x结果x为2,然后在次++x,那就是3了,3*3不就是9了, 主要是两个++x,别忘了他们都是同一个变量。

评分

参与人数 1鱼币 -1 收起 理由
我是师兄 -1 误导

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 21:57:00 | 显示全部楼层
看来你的基础得加强啊。编程的魅力之一就是可以在妹纸前炫耀一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 22:01:50 | 显示全部楼层
路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 23:08:43 | 显示全部楼层
三楼说的不错,哈哈~
可惜我刚毕业了,怀恋学校时光
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 00:15:04 | 显示全部楼层
x_Daniel 发表于 2014-8-25 21:29
第一次++x结果x为2,然后在次++x,那就是3了,3*3不就是9了, 主要是两个++x,别忘了他们都是同一个变量。

一楼正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 15:08:50 | 显示全部楼层
我又长见识了:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 19:33:13 | 显示全部楼层
[b]这个看编译器的.
抓图2.png

评分

参与人数 1鱼币 +5 收起 理由
拈花小仙 + 5 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 19:39:59 | 显示全部楼层
不要纠结于这些内容,我们要当程序员,不是语言专家~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 20:18:13 | 显示全部楼层
这种每个星期至少有人问一次的问题又出现了。。。真心不明白为什么遇到问题总觉得世界上自己是第一个遇到这个问题的人?为什么不baidu一下呢?

评分

参与人数 1鱼币 +1 收起 理由
h1006272147 + 1 确实如此!!!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 20:30:15 | 显示全部楼层
什么样的妹子,总是给哥哥出难题,你把她的电话给我,我骂他一顿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 20:58:00 | 显示全部楼层
本帖最后由 ♂情︵☆缘★ 于 2014-8-26 21:03 编辑

这应该得6吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 21:59:37 | 显示全部楼层
结果无定义
乘法操作符本身不保证是左操作数先被求值还是右边先被求值
问这个是没有意义的
具体结果还得看编译器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 22:33:11 | 显示全部楼层
一楼正解,不过也学到点了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 00:55:43 | 显示全部楼层
我理解 ++x 是先自增再参与运算 所以两次+1之后 x == 3;3 * 3 == 9{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 09:39:57 | 显示全部楼层
看编译器吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 12:47:59 | 显示全部楼层

5:        int i = 1, n;
00401028   mov         dword ptr [ebp-4],1
6:
7:        n = (++i) * (++i);
0040102F   mov         eax,dword ptr [ebp-4] //把1传给AX
00401032   add         eax,1  //eax = eax +1,加一在传给Ax结果为2
00401035   mov         dword ptr [ebp-4],eax
00401038   mov         ecx,dword ptr [ebp-4]//再将2传给CX
0040103B   add         ecx,1  //cx+1传给cx,结果为3
0040103E   mov         dword ptr [ebp-4],ecx
00401041   mov         edx,dword ptr [ebp-4]//再将3传给dx,dx为3
00401044   imul        edx,dword ptr [ebp-4]//3乘3传给dx
00401048   mov         dword ptr [ebp-8],edx//j结果9
8:
9:        printf ("%d\n", n);
0040104B   mov         eax,dword ptr [ebp-8]
通过上面的反汇编可以很清楚的看到!!!


VC反汇编结果

VC反汇编结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 18:04:10 | 显示全部楼层
我又长见识了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 21:37:09 | 显示全部楼层
妹子漂亮吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 02:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表