搜索
楼主: 超神级
打印 上一主题 下一主题

求助下...为何出错!

[复制链接]
46#
 楼主| 发表于 2014-8-12 12:59:28 来自手机 | 只看该作者
嗨,强哥! 发表于 2014-8-12 10:48
printf()函数括号里的参数是从右向左开始计算的,所以第二个例子,b=3.你要是显示b=2,可以把第3个参数去 ...

我自己也有点晕菜了。等ROS大大吧!。。。
来自: 微社区
47#
 楼主| 发表于 2014-8-12 13:00:57 来自手机 | 只看该作者
@rosynirvana 打扰下!来这个帖子看下。。有点晕菜。。
来自: 微社区
48#
 楼主| 发表于 2014-8-13 12:22:30 来自手机 | 只看该作者
嗨,强哥! 发表于 2014-8-12 10:48
printf()函数括号里的参数是从右向左开始计算的,所以第二个例子,b=3.你要是显示b=2,可以把第3个参数去 ...

我查了下资料逗号是16我记错了。这样的话就可以解释上面的问题了。先进行值传递“传参”。逗号是后面再执行。逗号表达式不影响结果。。。我猜应该是这样的。。。
或许这样解释更合理些吧!
来自: 微社区
49#
 楼主| 发表于 2014-8-13 12:29:16 来自手机 | 只看该作者
嗨,强哥! 发表于 2014-8-12 00:52
是连续的地址,反向的,这跟printf函数有关系。

对于代码的执行顺序。我记得好像是从上到下,从右到左。(优先级一样)撇除跳转语句。。

来自: 微社区
50#
 楼主| 发表于 2014-8-13 12:31:30 来自手机 | 只看该作者
一切看起来都很正常。。。
来自: 微社区
51#
 楼主| 发表于 2014-8-13 12:37:47 来自手机 | 只看该作者
嗨,强哥! 发表于 2014-8-12 10:48
printf()函数括号里的参数是从右向左开始计算的,所以第二个例子,b=3.你要是显示b=2,可以把第3个参数去 ...

感谢强哥的解答!然后就是前面的话看错。。。回复有点乱七八糟
来自: 微社区
52#
发表于 2014-8-15 23:26:19 来自手机 | 只看该作者
超神级 发表于 2014-8-13 12:37
感谢强哥的解答!然后就是前面的话看错。。。回复有点乱七八糟

你的程序我验证了一遍,三个变量地址是连续的(程序执行结果表明现实),至于为什么是从大到小排,其实是printf()函数对参数从右向左计算的结果。你想让它们的地址从小到大排列,只要printf("…",c,b,a)这样写就行了。
来自: 微社区
53#
发表于 2014-8-15 23:33:02 来自手机 | 只看该作者
超神级 发表于 2014-8-12 12:59
我自己也有点晕菜了。等ROS大大吧!。。。

关于printf()参数计算顺序,举个栗子:
int a = 1;
printf("%d\n%d\n", a,a  );
输出结果:
2
1
来自: 微社区
54#
发表于 2014-8-15 23:36:28 来自手机 | 只看该作者
本帖最后由 嗨,强哥! 于 2014-8-17 15:40 编辑

关于printf()参数计算顺序,举个栗子:
int a = 1;
printf("%d\n%d\n",  a, a++);
输出结果:
2
1
来自: 微社区
55#
发表于 2014-8-15 23:39:24 来自手机 | 只看该作者
手机看帖显示有问题,第一参数是a,第二个是a十十,这十十没有正常显示啊?!
来自: 微社区
56#
 楼主| 发表于 2014-8-16 18:48:39 | 只看该作者
嗨,强哥! 发表于 2014-8-15 23:39
手机看帖显示有问题,第一参数是a,第二个是a十十,这十十没有正常显示啊?!

饿                    
57#
发表于 2014-8-17 15:43:43 | 只看该作者

关于printf()参数计算顺序,举个栗子:
int a = 1;
printf("%d\n%d\n",  a, a++);
输出结果:
2
1
我重新编辑了回复
刚刚上机验证,这段程序是正确的。
58#
发表于 2014-8-17 15:46:49 | 只看该作者

[mw_shl_code=c,true]#include <stdio.h>
int main()
{
        int a, b, c;
    printf("%d\n%d\n%d\n",  &c, &b,&a);

        sleep(5000);
        return 0;
}[/mw_shl_code]

这样看,a b c就是连续地址,相当于数组。。。。
59#
发表于 2014-8-17 15:51:10 | 只看该作者
本帖最后由 嗨,强哥! 于 2014-8-19 10:21 编辑
李掌柜 发表于 2014-3-30 22:01
你的第一个例子的地址,我电脑上是这样的:
和你说的空间大小不一样,,,

不怪,因为printf()参数计算顺序是从左到右,所有反了。。。-----------纠正错误:printf()参数计算顺序是从右到左,汗,没注意审查。。。。。
60#
 楼主| 发表于 2014-8-18 06:36:50 来自手机 | 只看该作者
嗨,强哥! 发表于 2014-8-17 15:51
不怪,因为printf()参数计算顺序是从左到右,所有反了。。。

恩恩。有时间我也试试。
来自: 微社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表