关于#define swap(a,b)交换函数求助
#include <stdio.h>#include <stdlib.h>
//#define swap(a,b) {a=a+b;b=a-b;a=a-b;}
#define swap(a,b) {tmp=a;a=b;b=tmp;}
int g_count=1;
int g_n=0;
void p(int *a,int size);
void print_result(int *a);
int main(int argc, char *argv[])
{
int array[]={1,2};
g_n=sizeof(array)/sizeof(int);
p(array,g_n);
system("PAUSE");
return 0;
}
void print_result(int *a)
{
int i=0;
printf("count %d:",g_count++);
//printf("g_n=%d",g_n);
for(i=0;i<g_n;i++)
{
printf(" %d",a[i]);
}
printf("\n");
return;
}
void p(int *a,int size)
{
if(size==1)
{
print_result(a);
}
else
{
int i,tmp=0;
for(i=0;i<size;i++)
{
//printf("before1:a%d=%d,a%d=%d\n",i,a[i],size-1,a[size-1]);
swap(a[i],a[size-1]);
//printf("before2:a%d=%d,a%d=%d\n",i,a[i],size-1,a[size-1]);
p(a,size-1);
swap(a[i],a[size-1]);
//printf("after:a%d=%d,a%d=%d\n",i,a[i],size-1,a[size-1]);
}
}
return;
}
以上代码实现的是数字全排列,但是使用define swap(a,b) {a=a+b;b=a-b;a=a-b;}和#define swap(a,b) {tmp=a;a=b;b=tmp;}得出的是不同的结果。难道是编译器的问题吗?编译器是dev c++的。前者结果是2,1和1,2。后者结果就是2,1和1,0了