VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: mpc_bywind

讨论个C语言的问题

[复制链接]

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-26 06:09:01 | 显示全部楼层
用的什么编译器?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-26 16:54:01 | 显示全部楼层
这个和编译器有关
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-26 20:18:01 | 显示全部楼层
应该是语言标准吧。汇编里的语言选项关键字中C和STDCALL关键字都是反向顺序在堆栈压入过程参数,PASCAL关键字正向顺序压入参数。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-27 16:45:01 | 显示全部楼层
给你个建议,
如果不是很有把握。就先用i.然后再写一行++

a = i;
i++;

我还真的不知道,编译后有多大的差距,特别是现在的编译器优化还是很厉害的。
就是有一点差距,不是很特别的地方,也没什么影响。等程序都好了在优化就可以了。
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-27 19:36:02 | 显示全部楼层
楼上各位都说的差不多了。
这个和编译器有关的。建议编程时尽量不要这样用。弄不好自己都不知道错在哪里。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-29 05:36:01 | 显示全部楼层
我的理解,printf显示的是执行这行语句后变量的值,所以很容易理解
printf("%d,%d",i,i++);//这种情况显示为:3,2  —— 一开始i=2,执行完这条语句后,因为i++,所以i=3,但是i++这个表达式的值还是2

printf("%d,%d",i,++i);//这种情况显示为:3,3 ——执行完这条语句 i=3,(++i)也=3
后面两句的解释与前面两句类似,结果没问题
printf("%d,%d",i++,i);//这种情况显示为:2,3
printf("%d,%d",++i,i);//这种情况显示为:3,3
回复

使用道具 举报

0

主题

17

帖子

16.00

积分

新手上路

Rank: 1

积分
16.00
发表于 2020-1-30 00:45:02 | 显示全部楼层
楼上已经有人说过了,函数调用的时候,C语言标准没有规定参数计算的顺序。请不要写这样的代码。不同的编译器会有不同的行为。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-1 12:27:01 | 显示全部楼层
编译器是从右往左扫描的,设i=5
printf("%d,%d",i,i++);//6,5
printf("%d,%d",i,++i);//6,6,
printf("%d,%d",i++,i);//5,5
printf("%d,%d",++i,i);//6,5
回复

使用道具 举报

0

主题

16

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-2-1 18:00:01 | 显示全部楼层
关键就是从右到左执行的
还有就是使用前自增和使用后自增
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-12 09:45:02 | 显示全部楼层
如果不考虑编译器的其他行为,只考虑从右往左入栈。。。

printf("%d,%d",i,i++);//3,2
printf("%d,%d",i,++i);//3,3,
printf("%d,%d",i++,i);//2,2
printf("%d,%d",++i,i);//3,2

但实际情况会根据编译器的行为而不同,所以这种形式是不确定的。

记得 effect c++ 里有这条。。。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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