当我们执行以下代码时:
int x=1,y=0;
printf("%d,x=%dy=%d",x=y,x,y) ;
会出现结果:
0,x=0y=0
也就是说在printf语句中由于x=y的影响,x的值被改变了。
但是如果我们写一个函数来完成类似的动作:
定义一个swap函数来交换xy变量的值:
int swap(int *a,int *b){
int t;
t=*a;
*a=*b;
*b=t;
return 1;
}
之后我们用printf来输出,其中会用到swap函数,我们来看看swap函数的运行是否会影响接下来对xy的输出:
int main(){
int x=1,y=0;
printf("return of swap is %d\tx=%d,y=%d\n",swap(&x,&y),x,y);
return 0;
}
上面这段代码的输出如下:
return of swap is 1 x=1,y=0
注意到了么?xy的值并没有交换。
难道swap函数没有执行么?为什么会有返回值呢?
我们再次输出xy的值试试:
在return语句之前增加语句:
printf("\t\t\tx=%d,y=%d",x,y);
return of swap is 1 x=1,y=0
x=0,y=1
hey,xy的值又交换了!但是出现了延迟。
立即交换和有延时的交换之间的区别是为什么呢?