void swap(int*a,int*b)
{
int t,*tp;
tp = a;a = b;b = tp; //交换的不是形参a,b的值吗??这时a=7,b=3??
t = *a;*a = *b;*b = t; //这次交换的是实参i,j的值,所以i=7,j=3?
printf("%d,%d,",*a,*b);//打印的*a*b不是7,3吗?
}
main()
{
int i = 3,j = 7,*p = &i,*q = &j;
swap(p,q);
printf("%d,%d,%d,%d",i,j,*p,*q);
}
注释是我的理解,我也知道错的。很不明白这个加*和不加*交换值时的区别。越详细越好,越简化理解越好!非常感谢!
说实话不理解。交换了ab的指向是什么意思?那,t = *a;*a = *b;*b = t改变了地址上的值,把i,j互换了 那打印*a*b时不就是打印互换了的i,j 就是 7 3吗?
追答本来a指向i,b指向j,现在交换之后本来a指向j,b指向i,这就是ab指向交换。
追问tp = a;a = b;b = tp; //所以交换了指向后,也更改下行的取值吗?
t = *a;*a = *b;*b = t; //*a = *b = i ?
不是,函数两个交换,一个交换只是交换ab指向,另一个是交换这两个指针对应的变量的值