雁无留踪之意,水无取影之心
唉 没意思
今天一不小心让我碰到了一个类似这个的问题,所以想再来一次反驳
你前面所举的例子全不是因为逗号运算符而造成的自右向左,都是由于部分系统在调用函数时,参数的求值顺序是自右向左,而且这里面的","是参数分隔符,而不是逗号运算符的,例子如下:
第一个例子例子如下:
int main(void)
{
int a=0;
clrscr();
scanf("%d %d",&a,&a);
printf("%d",a);
getch();
}
第二个例子如下:
main()
{
int a=0;
clrscr();
printf("%d %d",a++,a++);
getch();
}
第三个例子如下:
int fun(int a,int b)
{
printf("a=%d\nb=%d",a,b);
}
int main()
{
int a=0;
fun(a++,a++);
}
另外我给你举几个不在函数中的例子:
第一个例子
#include"stdio.h"
main()
{
int i,a=1,b=2,c=3;
for(i=0;i<1;a=b,b=c)
i++;
printf("%d\t%d\t%d\n",a,b,c);
}
你运行一下,如果是自右向左,答案就是3 3 3,如果是自左向右答案就是2 3 3
第二个例子:
main()
{
int i,j=1,b=0;
for(i=0;i<=1;b=j,j++)
{ printf("j=%d\tb=%d\n",j,b);
i++;
}
}
如果是自右向左,答案就是 j=1 b=0 j=2 b=2,如果是自左向右,答案就是j=1 b=0 j=2 b=1;
第三个例子:
#include"stdio.h"
main()
{
int i=1,j=2,b=3,a=4;
a=(i=j,j=b);
printf("%d\t%d\t%d\t%d\n",a,b,i,j);
}
如果是自右向左,答案就是 3 3 3 3,如果是自左向右,答案就是 3 3 2 3;
这样的例子还有很多,你自己想想吧,如果你有谭浩强的第二版的书,请参考P64,P112,P150这三页的内容.
另外我也找到了一个函数中参数求值顺序为自左向右的顺序的一个编译器,Turbo C For Windows,你用这个编译器运行你发的第一个例子就知道了,下载地址:http://www.newhua.com/soft/42127.htm