zoukankan      html  css  js  c++  java
  • 指针使用注意事项

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

    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指针所指向的地址。
  • 相关阅读:
    Parameter Binding in ASP.NET Web API
    Which HTTP methods match up to which CRUD methods?
    ErrorHandling in asp.net web api
    HttpStatusCode
    Autofac Getting Started(默认的构造函数注入)
    Autofac Controlling Scope and Lifetime
    luvit 被忽视的lua 高性能框架(仿nodejs)
    undefined与null的区别
    VsCode中使用Emmet神器快速编写HTML代码
    字符串匹配---KMP算法
  • 原文地址:https://www.cnblogs.com/ltlly/p/4110310.html
Copyright © 2011-2022 走看看