第1个回答 2010-03-15
void swap(int *a,int *b) 函数调用用指针调用,调用前后,a 和 b 指向的地址 不会变。如果 函数调用 中 给它们赋了新值,新值会 带回来,如果没有 赋新值,那么 调用前后 地址不变,数值不变。
这样写看得清楚:
void swap(int *a,int *b)
{ int *t;
t=a;a=b;b=t;
printf("%d %d\n",*a,*b); // 打出 5 3
}
void main()
{ int i=3,j=5,*p=&i,*q=&j;
printf("p: %d\n",p); // 调用前 p 地址
swap(p,q); // 打出 5 3
printf("p: %d\n",p); // 调用后 p 地址 不变
printf("%d %d\n",*p,*q); // 打出 3 5
}
------------------------
所以,你要让它们交换数值才行:
void swap(int *a,int *b)
{ int t; t=*a;*a=*b;*b=t; }
第2个回答 2010-03-15
传地址我自己还没有自学到。但是可以给你详细的分享下传值问题。
首先,主程序中。把3赋给i,5赋给j,再把i赋给p,j赋给q,此时,p=3,q=5
第3个回答 2010-03-16
#include<stdio.h>
void swap(int *a,int *b)
{ int t;
t=*a;
*a=*b;
*b=t;
}
main()
{ int i=3,j=5,*p=&i,*q=&j;
swap(p,q);
printf("%d %d\n",*p,*q);
fflush(stdin);
getchar();}
运行的结果是5 3
#include<stdio.h>
void swap(int *a,int *b)
{ int *t;
t=a;a=b;b=t;
}
main()
{ int i=3,j=5,*p=&i,*q=&j;
swap(p,q); printf("%d %d\n",*p,*q);
fflush(stdin);
getchar();}
的运行结果是3 5