读书人

宏轮换交换数组元素后数组为空请

发布时间: 2013-12-10 15:05:55 作者: rapoo

宏替换,交换数组元素后,数组为空,请大家帮忙看看
下面是一个全排列函数,发现此函数只打印输出数组的最后一个值,我用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时, 就会出现错误.

读书人网 >C语言

热点推荐