重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
创新互联主要从事网站制作、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务宁夏,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
#define N 10
void Swap ( int *a, int *b, int n);
int main(void)
{
int *a, *b;
int num1[N], num2[N];
for (a = num1; a num1 + N; a++)
scanf ("%d", a);
for (b = num2; b num2 + N; b++)
scanf ("%d", b);
a = num1;//重新指向首地址
b = num2;//重新指向首地址
Swap (a, b, N);
printf ("*********交换后**********\n");
for (a = num1; a num1 + N; a++)
printf ("%3d", *a);
printf ("\n");
for (b = num2; b num2 + N; b++)
printf ("%3d", *b);
return 0;
}
void Swap (int *a, int *b, int n)
{
int temp;
int i;
for (i = 0; i n; i++)
{
temp = *(a + i);
*(a + i) = *(b + i);
*(b + i) = temp;
}
}
#includestdio.h
void mswap(int *p1, int* p2);//在前边声明一下函数
int main()
{
int a, b, *pa, *pb, swap(int p1, int p2);
scanf("%d%d", a, b);
pa = a; /*指针pa指向整数a*/
pb = b; /*指针pb指向整数b*/
printf("a=%d,b=%d\n", a, b);
mswap(pa, pb); /*调用函数swap,实参为指针*/
printf("a=%d,b=%d\n", a, b);
return 0;//int main()
}
void mswap(int *p1, int* p2)
{
int t;
t = *p1; *p1 = *p2; *p2 = t;
}
我用的vs2013,貌似系统自带swap,会报错。所以把函数名改成了mswap
函数参数用值传递时,函数的形参只不过是实参的拷贝而已。也就是说,1中调用swap函数时,内存中实际上a,b,x,y四个变量都存在,x是a的拷贝,y是b的拷贝,对x,y的值进行交换,a,b的值并未交换。
而2中用了指针传递,swap中的a,b,实际上是指向了main中的a,b。这个swap中交换的是a,b指向的变量的值,也就是交换了main中的a,b的值。