帮忙解答下面的C语言问题(急!!!),C语言中两个数交换

来源:百度知道 编辑:UC知道 时间:2024/06/18 03:44:54
#include"stdio.h"
void sub1(char a,char b)
{char c;
c=a;a=b;b=c;
}
void sub2(char *a,char *b)
{char c;
c=*a;*a=b;b=c;
}void sub3(char *a,char *b)
{char c;
c=*a;*a=*b;*b=c;
}
void main()
{char a,b;
a='A';b='B';
sub3(&a,&b);putchar(a);putchar(b);
sub2(&a,b);putchar(a);putchar(b);
sub1(a,b);putchar(a);putchar(b);
}

上面的题目sub2有点问题,不过编译通过了 我不知道编译器是怎么转化的 sub2应该是void sub2*(char *a,char b)才是正常的。因为你调用时候用的是sub2(&a,b) 这里传入的第二个参数是个值 不是地址 不过编译器转化 我不清楚怎么转化的

就说下sub1 和 sub3吧 就是按值传递和按地址传递的问题
按值传递不会改变原来的值 也就是如 a='A'; b='B'; 调用sub1(a,b)后 a,b的值并没有改变
而按值传递就相反 会改变原来的值,调用sub3(&a,&b)后就改变了 a,b的值

还有就是你连续调用sub3,sub2,sub1就会用改过的a,b值在做下次调用
过程如下,姑且sub2改为void sub2*(char *a,char b)

第一次sub3 调用 因为a,b都用按地址传递,且在函数体内交换了a,b值 调用后a='B' b='A'
第二次sub2 调用 因为a按地址传递,b按值传递,a被改变b不变。调用后a='A' b='A'
第三次sub3 调用 因为a按值传递,b按值传递,a,b都不变。调用后a='A' b='A'

建议每次调用后都给a,b赋给原来的值 这样才能清晰地看出各个函数的区别
如:
a='A';b='B';
sub3(&a,&b);putchar(a);putchar(b);
a='A';b='B';
sub2(&a,b);putchar(a);putchar(b);
a='A';b='B';
sub1(a,b);putchar(a);putchar(b);

愚见,感谢高手解答编译器转化的疑问

高手来拉,我知道 哈哈~

首先在sub3中 a,b的值掉换了 a='B',B='A';