VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4906|回复: 31

讨论个C语言的问题

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-17 13:40:01 | 显示全部楼层 |阅读模式
大家知道C语言中的函数调用顺序,但是这个问题我不太明白了.
printf("%d,%d",i,i++);
printf("%d,%d",i,++i);
printf("%d,%d",i++,i);
printf("%d,%d",++i,i);
让人捉摸不透哈.顺序不一致呢~~~

高手扎起哦~~~~
回复

使用道具 举报

0

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-22 18:09:02 | 显示全部楼层
上机运行一下不就清楚了
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-22 18:27:01 | 显示全部楼层
就是上机运行觉得顺序不一致啊.不知道到底是怎么回事呢.
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-22 21:00:01 | 显示全部楼层
i++和++i的区别嘛~~~~
i++在i使用过后增加1 ++i在i使用之前增加1
这么写 是能更明白地看出这个过程~...
回复

使用道具 举报

1

主题

11

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-1-22 21:45:02 | 显示全部楼层
你只要知道i++与++i的区别就行了
至于是从左到右还是从右到左,你就不用管了。
如果你发现某一个编译器上得出的结果与另一个编译器上得出的结果不一样,你不用管,这个是正常的。
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-23 00:00:01 | 显示全部楼层
不是的,不是的,在一个编译器里就会出现不同的顺序.我给出结果大家就知道了,假设i=2
printf("%d,%d",i,i++);//这种情况显示为:3,2
printf("%d,%d",i,++i);//这种情况显示为:3,3
printf("%d,%d",i++,i);//这种情况显示为:2,3
printf("%d,%d",++i,i);//这种情况显示为:3,3

很明显,前后两个语句的参数调用顺序是相反的嘛,在一个编译器里怎么会出现这种情况呢?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-23 12:27:01 | 显示全部楼层
这样的问题不要钻牛角尖,知道原理
用的时候运行下,
我都是把这些程序写成库函数,需要的时候掉出来。
嘿嘿
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-25 13:27:01 | 显示全部楼层
C语言的传参方向和Fortan不同,在编译原理里会学,函数调用test(a,b),传参顺序实际是b,a,(Fortan为a,b),所以
i=0;
printf("%d,%d",i,i++);
传入的是i++:0,i:1
打印循序还是i:i++,为1:0
回复

使用道具 举报

0

主题

78

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-1-25 22:09:01 | 显示全部楼层
这样的执行语句,
执行顺序并没有在标准中规定,
那么,它将由编译器自身决定 ~~

所以,
这样的语句执行结果依赖于 编译器。

至于你说的 “相反”,
那只是你的理解 和 编译器的执行不一致罢了 ...
回复

使用道具 举报

0

主题

78

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-1-25 23:09:02 | 显示全部楼层
printf("%d,%d\n",i,i++);//这种情况显示为:3,2
    printf("%d,%d\n",i,++i);//这种情况显示为:3,3
    printf("%d,%d\n",i++,i);//这种情况显示为:2,2
    printf("%d,%d\n",++i,i);//这种情况显示为:3,2

这样的结果可能比较容易理解 ~~

至于在你使用的编译器下,
为什么会得到那样的结果,
需要分析编译器的行为,
这个没有必要,
因为分析出来也没有用,
这个感觉就是在 找一个合理“借口”,得到某一种结果,
没有任何实际意义 .......
回复

使用道具 举报

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

本版积分规则

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

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