新手求教(c语言)自增问题[实例]
我在XP SP2+VC++6.0中测试
#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,e,j;
j=i++;
e=f(i,j);
printf( "%d,%d,%d ",e,j,i);
}
返回e=1,j=2,i=3
#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,e;
e=f(i,i++);
printf( "%d,%d ",e,i);
}
返回e=0,i=3
一直想不明白为什么这里2处的e值返回不一样.
换成e=f(i,++i);返回也是e=0,i=3(同问)
我刚刚学C,而且很喜欢它,希望各位高手指教,谢谢!
[解决办法]
换成e=f(i,++i);返回也是e=0,i=3(同问)
------
这个应该跟参数压栈顺序有关,c默认是从右往左入站,也就是++i返回的i先入栈,第一个参数i后入栈,此时i已经等于3,两个i相等,函数返回0
不知道是不是应该这样解释
[解决办法]
i++是整句代码调用i后,再执行i++操作
一句代码是以分号结束
[解决办法]
中所周知i++是后增,就是说 j = i++时i还没有加,直道下一次访问i时,i 才等于 i+1
所以,小女认为,上面的程序应该是这样的 :
int i=2,e,j;
j=i++;//j=2,i=2 ,此时i没有加1
e=f(i,j);//e=f(3,2)= 1,这次访问i,i已经变为 i+1了
printf( "%d,%d,%d ",e,j,i);//输出1,2,3
--------------
int i=2,e;
e=f(i,i++);//e=f(2,2)=0; 此时i还没有变为 i+1
printf( "%d,%d ",e,i); //输出0,3,这次访问,i就变成i+1了