void sub1(char*a,char b){char c;c=a*,*a=b,b=c;}
我们知道,如果要用函数交换数据参数必须是一个指针,或者引用!
而这里第一个是指针,可以正确的交换数据,但是第二个是变量!对于他来说,在函数内部是叫换成C了,实际上在函数外部,也就是main里的那个b还是D,不信你可以在sub1函数里输出一下看看!
第二个两个都是指针,能够正确的交换数据的地址,所以交换后的数据是E B
输出为DDEB!
还有sub2(a,&b); 你要么是这里有错
sub2(char*a,char *b)要么这里有错
以为参数为指针,必须要&解引用符!
你得程序贴错了。第一行,第二行中的c=a*,应该是c=*a;
sub1()和sub2()想要达到的功能是交换a和b的值。
但是由于sub1()里面的形参b是直接传的值,所以只能引用b的值。这里在sub1()中会建立一个局部变量char b。先把形参b的值赋值给局部变量b。你修改的是局部变量b的值,并没有修改原来的b的值。
而sub2()传递的参数b的地址。修改的时候直接修改了b的地址中所存储的值。所以,b的值改变了。