交换两个整型变量的数值


#include<stdio.h> void swap(int *p3,int *p4)//定义一个swap函数,定义两个指针参数p3,p4 { int t;// 定义一个整型t t=*p3; *p3=*p4; *p4=t;//将指针参数调换 } main() { int a,b;//定义两个整型变量a,b int *p1,*p2;//定义两个指针变量p1,p2 p1=&a;//指针p1指向a p2=&b;//指针p2指向b printf("输入a,b的值:") ; scanf("%d %d",&a,&b); printf("swap函数调用前:%d %d\n",*p1,*p2); swap(p1,p2);//调用swap函数 printf("swap函数调用后:%d %d\n",*p1,*p2); }

 

 

1、构建swap函数,实现两个整型变量数值的交换,且使用指针类型的数据作为swap函数的参数。

运行结果: 

输入a,b的值:5 6
swap函数调用前:5 6
swap函数调用后:6 5

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

 总结:

swap函数的作用是交换两个变量(a和b)的值,swap函数的两个形参p1,p2是指针变量,先执行main函数,输入a,b的值(a=5,b=6),然后将a和b的地址分别赋给p1,p2,使*p1指向a,*p2指向b,调用swap函数,使p1和p2的值交换,在函数调用时,将实参变量的值传送给形参变量。

 

2、void swap(int *p,int *q){int *m;*m=*p;*p=*q;*q=*m;}为何无法实现交换?

#include<stdio.h>
void swap(int *p,int *q)//定义swap函数,定义两个指针参数 
{
    int *m;// 此处将源代码中的整形m换成一个指针m用来交换
    *m=*p;
    *p=*q;
    *q=*m;//进行指针互换
}
main()
{
    int a,b;//定义两个整形变量a,b  
    printf("输入a,b的值:") ; 
    scanf("%d %d",&a,&b);
    printf("swap函数调用前:%d %d\n",a,b); 
    swap(&a,&b);//调用swap函数 
    printf("swap函数调用后:%d %d\n",a,b);
}

 运行结果:

输入a,b的值:5 6
swap函数调用前:5 6

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

总结:

  编译时没有错误,但是运行时蹦出错误提醒 错误原因如下:因为指针是存储内存地址的单位,只有给指针赋值后,才能使用指针,我们定义的指针*m,m可以存储一个指向int型数据的内存单元的地址,在刚定义指针*m时,它本身不存储任何内存单元的地址,所以系统会出现崩溃,只要问题出现在*m=*p上。

 

3、void swap(int *p,int *q){int *m;m=p;p=q;q=m;}为何无法实现交换?

#include<stdio.h>
void swap(int *p,int *q)//定义swap函数,定义两个指针参数 
{
    int *m;
    m=p;//用整型p代替*p
    p=q;
    q=m;//进行p和q的交换
}
main()
{
    int a,b;//定义两个整形变量a,b  
    printf("输入a,b的值:") ; 
    scanf("%d %d",&a,&b);
    printf("swap函数调用前:%d %d\n",a,b); 
    swap(&a,&b);//调用swap函数 
    printf("swap函数调用后:%d %d\n",a,b);
}

运行结果:

输入a,b的值:5 6
swap函数调用前:5 6
swap函数调用后:5 6

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

总结:

编译时没有出错,也能运行出来,问题出现在swap函数并未调换成功a,b的值,问题出在虽然调用swap函数时将a和b的地址传递给了swap函数中定义的指针p,q,但是只交换了p,q的地址,并没有交换p,q的值,如果想要交换两个变量的值,需要利用指针来间接的实现变量之间的交换。

 

4、构建comp函数,实现两个整数比较,比较大的值通过返回值返回给main。要求comp的参数和返回值都是指针类型数据。

#include<stdio.h>
int comp(int *p,int *q)//定义一个comp函数,定义两个指针变量 
{
    if(*p>*q)
     return *p;
    else return *q;//p q的值进行比较,大的值传给p,小的值传给q 
}
 
 main()
 {
     int a,b;//定义两个整型变量a,b 
     printf("输入a b的值:");
     scanf("%d %d",&a,&b);
     printf("comp函数调用前:%d %d\n",a,b);
     printf("comp函数调用后的值:%d\n",comp(&a,&b));//调用comp函数得到a,b中最大的值 
 }

运行结果:

输入a b的值:5 6
comp函数调用前:5 6
comp函数调用后的值:6

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

总结:需要调用函数来对变量进行比较时,可以借用指针通过地址间接访问变量,再对变量进行比较。

 

posted @ 2017-03-22 13:28  voyageur  阅读(1115)  评论(0编辑  收藏  举报