#include<stdio.h> int main() { void swap(int *p1,int *p2); int a,b; int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b); pointer_1=&a;pointer_2=&b; swap(pointer_1,pointer_2); printf("\n%d,%d\n",*pointer_1,*pointer_2); } void swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; }
14,36
36,14
--------------------------------
Process exited after 5.4 seconds with return value 0
请按任意键继续. . .
(2)无法实现交换的情况1:
void swap(int *p1,int *p2) { int *p; *p=*p1; *p1=*p2; *p2=*p; }
对于这种情况,这个关键还是要搞明白形参和实参的问题,把x y 的地址传进去之后, 在swap里面修的是指针的值,相当于把指针指向了另外一个地方,并不会修改指针指向的内容, 这个地方应该改成:
void swap(int *p1,int *p2)
{ int p;
p=*p1; *p1=*p2; *p2=p;
}
(3)无法实现交换的情况:
void swap(int *p1,int *p2) { int p; p=p1; p1=p2; p2=p; }
在这里swap函数有问题:函数中交换的是指针而不是指针的内容;指针是拷贝,不产生永久效果,只有让指针指向的内容发生交换才能形成永久性交换效果。改如下:
void swap(int *p1,int *p2)
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
(4)构建comp函数,实现两个整数比较,比较大的值通过返回值返回给main。要求comp的参数和返回值都是指针类型数据:
#include <stdio.h> int comp(int a,int b) { return (a>b?a:b); } int main() { int (*p)(int ,int ); int a,b,c; p=comp; printf("请输入两个数:\n"); scanf("%d,%d",&a,&b); c=(*p)(a,b); printf("max=%d\n",c); return 0; } 结果如下: 请输入两个数: 4,9 max=9 -------------------------------- Process exited after 5.398 seconds with return value 0 请按任意键继续. . .