标签:
当我们学完指针,知道每个数在内存中都占有一定的字节,也就是地址,才有取地址符号&,所以要交换两个数必须把这两个数所对应的内存互换,比如a=2;b=3;要让它们互换且输出,我们用一个函数来试试
1 #include "stdio.h" 2 int temp(int x,int y) 3 { 4 int c; 5 c=x; 6 x=y; 7 y=c; 8 } 9 void main() 10 { 11 int a,b; 12 a=2; 13 b=3; 14 temp(a,b); 15 printf("a=%d,b=%d",a,b); 16 }
很显然,这个方法并不行,它只是在表面互换a,b的值,并且函数只有在运行的时候是有内存的,当结束时,函数的内存便撤掉,让我们再看一个更让人误解的例子:
1 #include "stdio.h" 2 int temp(int x,int y) 3 { 4 int *p,*q,t; 5 p=&x; 6 q=&y; 7 t=*p; 8 *p=*q; 9 *q=t; 10 } 11 void main() 12 { 13 int a,b; 14 a=2; 15 b=3; 16 temp(a,b); 17 printf("a=%d,b=%d",a,b); 18 }
上面函数用了指针为什么还是不行?其实跟上一个例子差不多,在主函数main()中调用temp(a,b)作为实参传递给int temp(int x,int y)形参期间传递的是值2,3;并不是a,b的地址,然后取的是2,3的地址,结果就是2,3的地址互换,然而a=2,b=3还是没变,接下来看个正确是例子:
1 #include "stdio.h" 2 int temp(int *p,int *q) 3 { 4 int t; 5 t=*p; 6 *p=*q; 7 *q=t; 8 } 9 void main() 10 { 11 int a,b; 12 a=2; 13 b=3; 14 temp(&a,&b); 15 printf("a=%d,b=%d",a,b); 16 }
运行结果:,这时实参是temp(&a,&b);互换a,b的地址。
标签:
原文地址:http://www.cnblogs.com/doudoublog/p/5182485.html