【指针变量作为函数参数】典例:用指针互换两个数字

例题:a=0,b=1,请交换a,b的值。

#include<stdio.h>
int main()
{

    //声明2个典型的常错的调用函数交换数字的方式、1个正确的调用函数、指针交换数字的方式和1个打印函数(用于显示a,b的值以便读者判断a,b的值是否实现了交换(swap)。
    void swap_1(int x,int y);           
    void swap_2(int *x,int *y);
    void swap_3(int *x,int *y);
    void print(int a,int b);
    
    int a=0,b=1;         
    int *p1,*p2;        //定义指针变量
    
    p1=&a;              //初始化
    p2=&b;
    

//下面是3种函数的调用。建议一种一种看。这边建议去b站看郝斌老师的c语言自学教程,讲得十分清楚易懂,逻辑清晰。


    swap_1(a,b);
    print(a,b);
    
    swap_2(p1,p2)         //也可以写成swap_2(&a,&b); p1与&a等价。 
    print(a,b);
    
    swap_3(p1,p2)
    print(a,b);
    
    
    return 0;
}

void swap_1(int x,int y);       //实参a,b作函参 :无法实现交换,因为虽然形参实现了交换,但无法影响实参的值 
{
    int t;
    t=x;
    x=y;
    y=t;
}

void swap_2(int *x,int *y)      //指针p1、p2作函参 
{
    int *t;                     //定义指针变量 
    t=x;
    x=y;
    y=t;
    
    //无法实现交换:与swap_1的原理相同,只是形参指针的值实现了交换,却无法影响实参a、b的指针的值,故而a、b地址不变,仍为原值。 
}

void swap_3(int *x,int *y);      //指针p1、p2作函参 
{
    int t;                         //定义普通变量 (这是swap_2和swap_3的区别) 
    t=*x;
    *x=*y;
    *y=t;
    
    //可以实现交换:通过形参指针间接访问实参,通过改变指针指向来改变变量的值。(既要有指针又要有指向,所以就是*和p的综合,即改变的东西只能是*p,而不能是只有指向的a、b或只有指针变量的p1、p2。 
}

void print(int x,int y)
{
    printf("a=%d,b=%d\n",x,y);
}

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值