代码1
#include <stdio.h>
int main()
{
void swap(int* p1, int* p2);
int a, b;
int* pointer1, *pointer2;
printf("请输入两个整数:");
scanf_s("%d,%d", &a, &b);
pointer1 = &a;
pointer2 = &b;
if (a < b) swap(pointer1, pointer2);
printf("a=%d,b=%d\n", a, b);
printf("max=%d,min=%d", *pointer1, *pointer2);
return 0;
}
void swap(int* p1, int* p2)
{
int* p;
p = p1;
p1 = p2;
p2 = p;
}
结果1
代码2
#include <stdio.h>
int main()
{
void swap(int* p1, int* p2);
int a, b;
int* pointer1, *pointer2;
printf("请输入两个整数:");
scanf_s("%d,%d", &a, &b);
pointer1 = &a;
pointer2 = &b;
if (a < b) swap(pointer1, pointer2);
printf("a=%d,b=%d\n", a, b);
printf("max=%d,min=%d", *pointer1, *pointer2);
return 0;
}
void swap(int* p1, int* p2)
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
结果2
原因
代码1:因为形参只是实参的一个副本,交换的只是一个复制后的数,然后函数结束时就清除了,所以没有达到交换的目的。
代码2:形参是实参的一个副本,但他们所指向的内存确是同一个地方,所以可以达到交换。