社区
C语言
帖子详情
初学C语言,关于算术运算的问题。
fengwu__
2008-07-23 09:44:59
C语言代码:
main()
{
int i=5;
int q=(++i)+(++i)+(++i);
printf("%d",q);
}
第一个问题:q是否应该等于24?
第二个问题:我使用VC++6.0编译运行,得到q=22;使用VS2005编译运行,得到q=21。为什么会得到这两个结果?
第三个问题:如果我把int q=(++i)+(++i)+(++i)改为q=i+(++i)+(++i),
仍使用VC6.0编译运行,为什么结果是19?
...全文
128
11
打赏
收藏
初学C语言,关于算术运算的问题。
C语言代码: main() { int i=5; int q=(++i)+(++i)+(++i); printf("%d",q); } 第一个问题:q是否应该等于24? 第二个问题:我使用VC++6.0编译运行,得到q=22;使用VS2005编译运行,得到q=21。为什么会得到这两个结果? 第三个问题:如果我把int q=(++i)+(++i)+(++i)改为q=i+(++i)+(++i), 仍使用VC6.0编译运行,为什么结果是19?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fengwu__
2008-07-23
打赏
举报
回复
可能是我的问题没有说清楚。。
我想知道VC6.0是如何计算q=(++i)+(++i)+(++i)的?在内存中,是否只有一个地址存放i?如果是,那么i自增三次,然后结果应该是24。如果将(++i)看做一个函数,那么i自增后的值放在什么地方?是什么原因使程序又开辟了一块空间来存放++i的结果?还有该赋值表达式的运算顺序是怎样的?
eric_0206
2008-07-23
打赏
举报
回复
有意思,关注一下~!
mylinx
2008-07-23
打赏
举报
回复
应该是21吧就同楼上说的的一样,()()()运算级别比++高。所以应该是先计算()内部的,
在不同的系统上测试的结果不一样是因为不同的系统计算的顺序不同吧!具体的我也不是很清楚。
在进行编程的时候,尽量的不要这样写,结果正确与否,容易引起歧义。
realdragon2
2008-07-23
打赏
举报
回复
一般不这样写代码,这样写的结果类似于: f()+g()+h(). 三个函数相加的情形, 三个函数中先调用哪个是不确定的.
hai040
2008-07-23
打赏
举报
回复
不确定
考试也可以这样答
cheery_an
2008-07-23
打赏
举报
回复
我觉得应该是21啊,因为q=(6)+(7)+(8),括号的优先级别大于++运算符,所以绝对不是24,至于vc60得到的是22,我也想知道是为什么。
QQsoftware
2008-07-23
打赏
举报
回复
这种问题在不同的编译器上有不同的结果,Ansic标准是在编译器出现以后才推出的,很多编译器在设计的时候使用不同的计算方法!
realdragon2
2008-07-23
打赏
举报
回复
既然使用不同的编译器得出的结果不同,思维就不要拘泥于到底该以什么顺序计算,所谓,没有对错之分了,这样的题目.
btw:
Linux GCC编译器:
int q=(++i)+(++i)+(++i);
等于22,
q=i+(++i)+(++i),
等于19.
8楼的用的怎么环境?
fengwu__
2008-07-23
打赏
举报
回复
C语言运算符优先级规定:括号成员第一,包括[]和()。
所以我认为应该首先计算三个(++i),然后才按照右结合的规定计算括号外的加号。
编译器没有按照C语言的规定执行?还是“(++i)”中的括号不是运算符?
[Quote=引用 7 楼 xkyx_cn 的回复:]
i只有一个地址
来分析整个语句int q=(++i)+(++i)+(++i);
语义是:定义int型变量q,并且用表达式(++i)+(++i)+(++i)来初始化它
编译器首先就得对表达式(++i)+(++i)+(++i)求值,顺序和结果都是确定的:
(1):先求第一个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==6
(2):再求第二个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==7
(3):求i+i;将i放入另外寄存器,寄存器+i的值 寄存器结果14
(4)再求第三个(++i) 将i放入…
[/Quote]
wzzyly
2008-07-23
打赏
举报
回复
int q=(++i)+(++i)+(++i);
等于21,
q=i+(++i)+(++i),
等于18.
xkyx_cn
2008-07-23
打赏
举报
回复
i只有一个地址
来分析整个语句int q=(++i)+(++i)+(++i);
语义是:定义int型变量q,并且用表达式(++i)+(++i)+(++i)来初始化它
编译器首先就得对表达式(++i)+(++i)+(++i)求值,顺序和结果都是确定的:
先求第一个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==6
再求第二个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==7
求i+i;将i放入另外寄存器,寄存器+i的值 寄存器结果14
再求第三个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==8
将保存上面的i+i结果的寄存器+i的值 寄存器结果22
结果赋值给q
[Quote=引用 6 楼 fengwu__ 的回复:]
可能是我的问题没有说清楚。。
我想知道VC6.0是如何计算q=(++i)+(++i)+(++i)的?在内存中,是否只有一个地址存放i?如果是,那么i自增三次,然后结果应该是24。如果将(++i)看做一个函数,那么i自增后的值放在什么地方?是什么原因使程序又开辟了一块空间来存放++i的结果?还有该赋值表达式的运算顺序是怎样的?
[/Quote]
任务理解
C语言
算术
运算
.ppt
任务理解
C语言
算术
运算
.ppt
c语言
四则
运算
c语言
四则
运算
小程序 带音乐 大一
c语言
期末运用
初学
者适用
基本
算术
运算
(加减乘除)的
C语言
计算器
下载前必看:https://pan.quark.cn/s/ab553e3f636e Calculator You can use it + - * / or with ( )
C语言
数值
运算
经典源码
C语言
数值
运算
经典源码 c的基础数值
运算
,对
初学
者有点用
C语言
之
算术
运算
符共2页.pdf.zip
C语言
之
算术
运算
符共2页.pdf.zip
C语言
70,039
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章