首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

宏轮换,交换数组元素后,数组为空,请大家帮忙看看

2013-12-10 
宏替换,交换数组元素后,数组为空,请大家帮忙看看下面是一个全排列函数,发现此函数只打印输出数组的最后一

宏替换,交换数组元素后,数组为空,请大家帮忙看看
下面是一个全排列函数,发现此函数只打印输出数组的最后一个值,我用GDB调试,发现是用宏替换交换元素后,打印s的值为空,但是不知道是问题在哪里,请大家帮忙看看,先谢谢了,下面是部位代码
  4 #define SP(A,B) {(A)=(A)+(B);(B)=(A)-(B);(A)=(A)-(B);}
 
 13   void recursion(char *s,int b,int e)
 14 {
 15     int i;//作为输出循环控制
 16     if(b>=e)
 17     {
 18         for(i=0;i<=e;i++)
 19         {
 20             printf("%c",s[i]);
 21         }
 22         printf("\n");
 23     }
 24     else
 25     {
 26         for(i=b;i<=e;i++)
 27         {
 28             SP(s[b],s[i]);
 29             recursion(s,b+1,e);
 30             SP(s[b],s[i]);
 31         }
 32     }
 33 }
下面是GDB单步执行前后 s的值
宏轮换,交换数组元素后,数组为空,请大家帮忙看看
[解决办法]
因为你写的那个SP(A, B)的宏, 只有在&A != &B的情况下才会成立.
而你调用的代码SP(s[b],s[i]), 当b==i时, 就会出现错误.

热点排行