栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】利用指针实现a,b数值交换(swap),指针程序易错改正(程序注释详细)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】利用指针实现a,b数值交换(swap),指针程序易错改正(程序注释详细)

目录

swap数值交换方法:

改进后的change3算法:


swap数值交换方法:

change2()与change3()方法正确,change1()为错误实例演示,运行程序可以看到指针指向地址数值,从而理解错误原因。(change3为改进算法)

#include 
#include 

//int *p1,*p2,*p3;

int main()
{
    void change1(int *b1,int *b2);//声明函数
    void change2(int *b1,int *b2);//声明函数
    void change3(int *b1,int *b2);//声明函数
    printf("pointer!n");

    int a1,a2,a3;
    a1=1; a2=2; a3=3;

    int *p1,*p2,*p3=&a3;
//p3=&a3;
    p1=&a1;
    p2=&a2;

    printf("未互换地址时p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3);
    printf("----------------------------------------n");
    printf("错误实例,仅改指针b1,b2值,p1,p3并未变n");
    printf("未互换P:%d,%d,%dn",p1,p2,p3);
    change1(p1,p3);//等价change(&a1,&a3);
    printf("互换后P:%d,%d,%dn",p1,p2,p3);
    printf("互换地址后p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3);

    printf("----------------------------------------n");
    
//使用改进实例需要将其余部分注释掉,因为全局变量和局部变量重名冲突了
//    printf("改正实例:既然是p1,p2没交换,最后更改以下即可n");//需要定义指针为全局变量
//    printf("p1=b1,p3=b2n");
//    printf("未互换P:%d,%d,%dn",p1,p2,p3);
//    change3(p1,p3);//等价change(&a1,&a3);
//    printf("互换后P:%d,%d,%dn",p1,p2,p3);
//    printf("互换地址后p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3);
//
//    printf("----------------------------------------n");

    printf("正确实例:既然是a1,a2对象交换,函数就要进行对象的交换*p1,*p2n");
    printf("p1->a1;temp=a1;p1=p2->a2;p2=temp->a1n");
    printf("未互换P:%d,%d,%dn",p1,p2,p3);
    change2(p1,p3);//等价change(&a1,&a3);
    printf("互换后P:%d,%d,%dn",p1,p2,p3);
    printf("互换地址后p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3);

    printf("----------------------------------------n");

    return 0;
}

    void change1(int *b1,int *b2){
        int *b=NULL;//防止野指针
        b=b1;//b存b1存储的地址值
        b1=b2;
        b2=b;//b1 ,b2存储的地址值互换
        printf("互换后B:%d,%dn",b1,b2);
    }

     void change3(int *b1,int *b2){
        int *b=NULL;//防止野指针
        b=b1;//b存b1存储的地址值
        b1=b2;
        b2=b;//b1 ,b2存储的地址值互换
        printf("互换后B:%d,%dn",b1,b2);
        p1=b1;
        p3=b2;
        printf("互换后P:%d,%dn",p1,p2);
    }

    void change2(int *b1,int *b2){
        int temp;//
        temp=*b1;//
        *b1=*b2;
        *b2=temp;//b1 ,b2存储的地址值互换
        printf("互换后B:%d,%dn",b1,b2);


    }

改进后的change3算法:
#include 
#include 

int *p1,*p2,*p3;

int main()
{
    
    void change2(int *b1,int *b2);//声明函数
    printf("pointer!n");

    int a1,a2,a3;
    a1=1; a2=2; a3=3;

    //int *p1,*p2,*p3=&a3;
    p3=&a3;
    p1=&a1;
    p2=&a2;


    printf("----------------------------------------n");
    
//使用改进实例需要将其余部分注释掉,因为全局变量和局部变量重名冲突了
    printf("改正实例:既然是p1,p2没交换,最后更改以下即可n");//需要定义指针为全局变量
    printf("p1=b1,p3=b2n");
    printf("未互换P:%d,%d,%dn",p1,p2,p3);
    change3(p1,p3);//等价change(&a1,&a3);
    printf("互换后P:%d,%d,%dn",p1,p2,p3);
    printf("互换地址后p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3);

    printf("----------------------------------------n");


    return 0;
}

     void change3(int *b1,int *b2){
        int *b=NULL;//防止野指针
        b=b1;//b存b1存储的地址值
        b1=b2;
        b2=b;//b1 ,b2存储的地址值互换
        printf("互换后B:%d,%dn",b1,b2);
        p1=b1;
        p3=b2;
        printf("互换后P:%d,%dn",p1,p2);
    }


【C语言】深入浅出谈指针:理解指针、指针定义和指针代码实例swap(代码详细注释,含易错实例以及改进办法)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769143.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号