求解释
#include<stdio.h>fun1(char a,char b){char c;c=a;a=b;b=c;}
fun1(char *a,char b){char c;c=*a;*a=b;b=c;}
fun1(char *a,char *b){char c;c=*a;*a=*b;*b=c;}
void main()
{
char a,b;
a='A';b='B';fun1(a,b);putchar(a);putchar(b); //为什么没交换?
a='A';b='B';fun1(&a,b);putchar(a);putchar(b);
a='A';b='B';fun1(&a,&b);putchar(a);putchar(b);
putchar('\n');
}
//结果为什么是ABBBBA,请详细解释 {:10_266:}握草 代码量好大 懒得看了。 因为fun1是局部函数,主函数调用fun1后,会在栈上开辟内存空间(两个字符),这个内存空间会有值传递,即主函数中的'A','B'会放在这里进行运算。而主函数main其实也是个局部函数,在最开始定义变量的时候也在栈上开辟了内存空间放置变量值。这两个内存空间是相互独立的,当fun1运行完毕后,栈会释放,局部函数虽然进行了运算(只在自己开辟的内存空间上交换),但没有改变main开辟的内存空间上的变量值。
很久没有研究C了,不知道解释的对不对
页:
[1]