#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;
}

结果如下:
请输入两个数:
49
max=9

--------------------------------
Process exited after 5.398 seconds with return value 0
请按任意键继续. . .

 

posted on 2017-03-22 13:57  少恭寻  阅读(194)  评论(1编辑  收藏  举报