社区
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?
...全文
106
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语言
者期末复习/考前突击 第一章绪论 第二章C数据类型 第三章简单的简单的
算术
运算
和表达式 - new.ppt 第04章-键盘输入和屏幕输出 - new.ppt 第05章-网站习题.ppt 第05章-选择控制结构 (1).ppt 第06章-...
小学生
算术
自测系统源码
简单的
c语言
编程
算术
自测四则
运算
,附加有乘法口诀表,对系统内语言进行优化 更人性化,
初学
代码所以代码规范很差。
C语言
及程序设计提高视频精讲
系列课程针对没有任何程序设计基础的
初学
者,关注学习者能够通过实践的方式,学会利用
C语言
解决
问题
。与课程同步的实践指导,以及贯穿始终的“银行储蓄系统”,帮助
初学
者真正具备程序设计能力。
初学
者编程入门:
C语言
指针使用方法
1、指针的概念 2、指针的
算术
运算
3、
运算
符&和* 4、指针表达式 5、数组和指针的关系
C语言
中的
运算
符和表达式
C语言
中的
运算
符和表达式,为
初学
者讲解了
C语言
中的各种
运算
符和
运算
表达式.
C语言
69,368
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章