交换两个整形变量的数值

#include<stdio.h>
int main()
{
    void swap(int *a,int *b);//声明swap函数 
    int c,d;
    scanf("%d %d",&c,&d);//输入需要进行交换的整数 
    int *a1,*b1;
    a1=&c;
    b1=&d;//把两个整数的地址存放到指针里 
    swap(a1,b1);//用swap函数对数值进行交换 
    printf("%d %d\n",*a1,*b1); 
    
 } 
void swap(int *a,int *b) //定义形参为指针的函数 
{
    int t;
    t=*a;
    *a=*b;
    *b=t;//对形参的地址进行调换 
}
85 96
96 85

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

总结:

1> 一开始没有注意到交换函数里有关指针类型的交换,输出的值没有交换,后来又仔细看了看课本里的例题,发现指针的数值交换需要进行交换的是数值的地址,也就是把*a与*b当做数值来处理,不能去掉*号进行交换。

2> 需要在主函数中首先说明要使用的函数。

 

  

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

*m是指针变量m所指向的变量,但m中没有确定的值,所以m指向的单元是不确定的,如果对*m赋值有可能会破坏系统正常运行,所以不会交换成功。

 

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

比如把a,b的值交换,*p是a的地址,*q是b的地址。

把a,b比作门牌号,*p,*q分别是两个房间的人,swap函数执行完后,只是让*p,*q交换了房间,但是门牌号a,b并没有改变。

所以该程序无法实现交换。

 

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

#include<stdio.h>
int main()
{
    int comp(int *a,int *b);//声明函数 
    int a1,b1,t;
    int *a2,*b2;
    scanf("%d %d",&a1,&b1);//输入需要比较的数值 
    a2=&a1;
    b2=&b1;//把数值的地址存放在指针中 
    t=comp(a2,b2); //用comp函数把最大值返回给t 
    printf("%d\n",t);
 } 
int comp(int *a,int *b)//定义可以返回值的函数 
{
    if(*a>*b)
     return("%d",*a);
    else
     return("%d",*b);//指针所代表的数值进行比较,输出最大值 
}
85 963
963

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

  

 

posted on 2017-03-22 19:21  入骨温  阅读(376)  评论(2)    收藏  举报

导航