博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针排序
阅读量:6306 次
发布时间:2019-06-22

本文共 1272 字,大约阅读时间需要 4 分钟。

 

void swap(int *pt1,int *pt2)

{

    int i;

    i=*pt1;

    *pt1=*pt2;

    *pt2=i;

}

void exchange(int *q1,int *q2,int *q3)

{

    if(*q1<*q2)

        swap(q1,q2);

    if(*q1<*q3)

        swap(q1, q3);

    if(*q2<*q3)

        swap(q2, q3);

}

 

void main()

{

    int a,b,c;

    int*p1,*p2,*p3;

    p1=&a;

    p2=&b;

    p3=&c;

    *p1=3;

    *p2=6;

    *p3=9;

    exchange(p1, p2, p3);

    printf("a=%d,b=%d,c=%d",a,b,c);

}

 

注意:实参传入指针的话,形参指针指向改变,不影响原形参指向的变量的值

void exchange(int *q1)

{

    int i=19;

    q1=&i;  形参q1指向改变,不影响主函数中a的值,很简单

  //*q1=100;     //将100传递给q1,接口传递回主函数,a的值得以改变

}

 

void main()

{

   

    int a;

    int*p1;

    p1=&a;

    

    *p1=3;   //给a赋值3;

    

    exchange(p1);  指针做实参传入

    printf("%d",a);

}

 

 

 

 

另外二维指针传递指针的地址

void exchange(int **q1)

{

    static int i=19;

    int *p=&i;

    *q1=p;   //改变了main函数中指针的地址   如果改成q1=&p;则main函数中,指针的地址不会改变,

因为只是二级指针的指向改变,不会影响到1级指针。技巧,只要等号左边形参无*,都不会引起main函数变量的变化(见上面红的方块)

    printf("pppppp:%p\n",p);     //pppppp:0xbfffd9dc

    printf("pppppp:%d\n",*p);    //pppppp:19

}

void main()

{

    int a;

    int*p1;

    p1=&a;

    

    *p1=3;

    printf("%p\n",p1);  //0xbfffda30

    exchange(&p1);

    printf("%p\n",p1);  //0xbfffd9dc

    printf("%d\n",a);

    printf("%d",*p1);   //-1073751564    为什么是乱值?原因是exchange函数中的变量i,在出函数内存就被释放了,指向该地址的p1指针显示的是无效内容。

}

 

 

解决办法:

void exchange(int **q1)

{

    static  int i=19;   添加static后函数结束,地址不会被回收

    int *p=&i;

    *q1=p;

    printf("pppppp:%p\n",p);

    printf("pppppp:%d\n",*p);  

}

转载于:https://www.cnblogs.com/pengyingh/articles/2362827.html

你可能感兴趣的文章
[每日一题] OCP1z0-047 :2013-08-11 描述层次查询(hierarchical query)........................31...
查看>>
Shell命令:echo 命令详解
查看>>
尼姆博弈
查看>>
【推荐】程序员必读的三十本经典巨作
查看>>
DES函数加密算法
查看>>
我的友情链接
查看>>
SEO工作之友好引导(二)
查看>>
ifcfg/ip/ss命令详解
查看>>
关于 Flume NG
查看>>
北电交换机常用配置
查看>>
Linux磁盘及文件系统管理
查看>>
Linux系统下Apache日志文件设置、更改默认网站目录、防止php***跨站设置、禁止空主机头...
查看>>
shell判断文件是否存在
查看>>
EXCHANGE事务日志和邮箱数据库的存储位置
查看>>
oracle conn /as sysdba后显示 乱码”???“
查看>>
(三)把域服务升级和迁移到Windows Server 2012 R2上
查看>>
动态主机配置协议:DHCP简介
查看>>
Python基础篇(一)搭建环境
查看>>
跟我学Spring Cloud(Finchley版)-05-服务注册与服务发现-Eureka入门
查看>>
VisualStudio不让控制台程序一闪而过
查看>>