• 指针使用注意事项


    题:即输入的两个整数按大小顺序输出。今用函数处理,而且用指针类型的数据作函数参数。

    swap(int *p1,int *p2){
        int temp;
        temp=*p1;
        *p1=*p2;
        *p2=temp;
    }
    main(){
        int a,b;
        int *pointer_1,*pointer_2;
        scanf("%d,%d",&a,&b);
        pointer_1=&a;pointer_2=&b;
        if(a<b) swap(pointer_1,pointer_2);
        printf("
    %d,%d
    ",a,b);
    }
    对程序的说明:
    1) swap是用户定义的函数,它的作用是交换两个变量(a和b)的值。swap函数的形参p1、p2是指针变量。程序运行时,先执行main函数,输入a和b的值。然后将a和b的地址分别赋给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。



    2) 接着执行if语句,由于a<b,因此执行swap函数。注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值传递给形参变量。采取的依然是“值传递”方式。因此虚实结合后形参p1的值为&a,p2的值为&b。这时p1和pointer_1指向变量a,p2和pointer_2指向变量b。



    3) 接着执行执行swap函数的函数体使*p1和*p2的值互换,也就是使a和b的值互换。函数调用结束后,p1和p2不复存在(已释放)。

    4) 最后在main函数中输出的a和b的值是已经过交换的值。请注意交换*p1和*p2的值是如何实现的。请找出下列程序段的错误:

    swap(int *p1,int *p2){
        int *temp;
        *temp=*p1;      /*此语句有问题*/
        *p1=*p2;
        *p2=temp;
    }
    注意:temp指针定义了,当时没有初始化值,即没有指向的地址。此时*p1--相当于一个int类型的值,直接赋值给temp指针,肯定报错,即temp指针没有接收*p1的地址,但是此时假使*p1指针初始化成功,那么temp=p1,这样可以理解成,temp指针指向了p1指针所指向的地址。
  • 相关阅读:
    Nginx学习总结(一)
    zabbix3.4.8配置自动发现主机并监控
    Windows server 2012/2016系统安装zabbix3.2客户端
    CentOS7.6系统安装zabbix3.4.8客户端
    一个小爬虫的整体解决方案
    如何通过一个立方体搭建一栋楼
    用Scrapy框架开发的一个爬虫项目
    寻找替代imagemin更好的插件
    原生和es6复杂数组去重的方法
    javascript关于对象或者数组深克隆的写法
  • 原文地址:https://www.cnblogs.com/ltlly/p/4110310.html
Copyright © 2020-2023  润新知