关于C语言&&

[复制链接]
查看11 | 回复3 | 2008-8-16 15:53:59 | 显示全部楼层 |阅读模式
#include "stdio.h"
main()
{
int a=3,b=2,c=4,m=6,t;
printf("%d\n",ac);
printf("%d,%d\n",(a>b)&&(m=c),m);
printf("%d,%d\n",(ac); printf("%d,%d\n",(a>b)&&(m=c),m); /* 右面的m为6先传, 左面m才获得4, 所以输出 1,6 */ printf("%d,%d\n",(ac); printf("%d,%d\n",(a...
回复

使用道具 举报

千问 | 2008-8-16 15:53:59 | 显示全部楼层
部分编译器为了效率在&&计算中,如果左边是FALSE,那么就不用判断右边了,一定是FALSE,就不执行右边了,能节省时间。||相反,左边真则不判断右边了楼主的程序已经引起歧义,不推荐将改变值的表达式放到&&或||两旁为了这个java中就用&和&&来专门区别,是判断两边还是如果一般假就不判断另里边。所以jsva里没有...
回复

使用道具 举报

千问 | 2008-8-16 15:53:59 | 显示全部楼层
这和printf计算时的压栈顺序是有关系的printf("%d,%d\n",(a>b)&&(m=c),m); 执行时是先把参数压到栈中,然后输出,先压m还是后压m决定了输出的结果不光printf有类似的问题...
回复

使用道具 举报

千问 | 2008-8-16 15:53:59 | 显示全部楼层
净是弄些刁钻古怪的程序,在这里耍杂技一样啊!不能显示你的编程水平高啊看来,Turbo C中的printf是从右向左输出的,而VC中的printf是从左向右输出的。就这么点学问了,恐怕...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行