摘自C语言程序设计(曾怡)第二十一讲
注意,不同的系统中,实参的计算顺序不同.微机上一般是从右到左.如8-4(1).为避免由此收起的混乱,一般应在调用函数前计算出实参的值,如8-4(2)!
例:8-4(1)
#include <stdio.h>
int f(int a,int b)
{ int c;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return c;
}
void main()
{ int i=2,p;
p=f(i,++i);
printf("%d",p);
}
例:8-4(2)
#include <stdio.h>
int f(int a,int b)
{ int c;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return c;
}
void main()
{ int i=2,j,p;
j=++i;
p=f(i,j);
printf("%d",p);
}
前者f(i,++i)就是f(3,3)其输出结果为:0;
后者f(i,j)就是f(2,3)其输出结果为:-1;
而自己上机实践时,两个程序的输出结果一样,都是:0;
问为什么会是这样啊?!!是不是程序哪里出错啦?!
注意,不同的系统中,实参的计算顺序不同.微机上一般是从右到左.如8-4(1).为避免由此收起的混乱,一般应在调用函数前计算出实参的值,如8-4(2)!
例:8-4(1)
#include <stdio.h>
int f(int a,int b)
{ int c;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return c;
}
void main()
{ int i=2,p;
p=f(i,++i);
printf("%d",p);
}
例:8-4(2)
#include <stdio.h>
int f(int a,int b)
{ int c;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return c;
}
void main()
{ int i=2,j,p;
j=++i;
p=f(i,j);
printf("%d",p);
}
前者f(i,++i)就是f(3,3)其输出结果为:0;
后者f(i,j)就是f(2,3)其输出结果为:-1;
而自己上机实践时,两个程序的输出结果一样,都是:0;
问为什么会是这样啊?!!是不是程序哪里出错啦?!