对于是值传递还是地址传递不能通过行参来判断,当形参是指针时既有可能是值传递也有可能是地址传递,要画图分析,几个例子如下

 

 
  1. void Exchg1(int x, int y)    
  2. {  
  3.   int tmp;  
  4.   tmp=x;  
  5.   x=y;  
  6.   y=tmp;  
  7.    
  8. }  
  9. void main()  
  10. {  
  11.   int a=4,b=6;  
  12.   Exchg1 (a,b) ;  
  13.   printf("a=%d,b=%d\n",a,b);//4,6  
  14. }  
 
  1. void Exchg2(int *px, int *py)  
  2. {  
  3.   int tmp=*px;  
  4.   *px=*py;  
  5.    *py=tmp;  
  6.    
  7. }  
  8. void main()  
  9. {  
  10.   int a=4;  
  11.   int b=6;  
  12.       Exchg2(&a,&b);  
  13.       printf("a=%d,b=%d\n", a, b);//6,4  

 

 
  1. void Exchg2(int &x, int &y)  
  2. {  
  3.    int tmp=x;  
  4.    x=y;  
  5.    y=tmp;  
  6.     
  7. }  
  8. void main()  
  9. {  
  10.   int a=4;  
  11.   int b=6;  
  12.       Exchg2(a,b);  
  13.       printf("a=%d,b=%d\n", a, b);//6,4  
  14. }  

 

 

 

 
  1. void swap(int *a,int *b)    
  2. {    
  3.         int *tmp=NULL;    
  4.         tmp=a;    
  5.         a=b;    
  6.         b=tmp;    
  7. }    
  8.     
  9. int main(int argc,char **argv)    
  10. {    
  11.         int a=2;    
  12.         int b=3;    
  13.         printf("Before swap a=%d  b=%d\n",a,b);    
  14.         swap(&a,&b);    
  15.         printf("After swap a=%d  b=%d\n",a,b); //2,3  
  16.         return 0;    
  17. }    

 

 
  1. void swap(int **a,int **b)  
  2. {  
  3. int temp = **a;  
  4. **a = **b;  
  5. **b = temp;  
  6. }  
  7.  
  8. int main()  
  9. {  
  10. int i = 1;  
  11. int j = 2;  
  12.  
  13. int *p1 = &i;  
  14. int *p2 = &j;  
  15.  
  16. int *a = p1;  
  17. int *b = p2;  
  18.  
  19. swap(&a,&b);  
  20. printf("a = %d,b = %d\n",i,j);//2,1  
  21. return 0;