zoukankan      html  css  js  c++  java
  • 函数形参 原型、指针、引用、

    2012-10-19 21:48 (分类:计算机程序)

    写的这些是在给学弟学妹讲解时自己更深层次的理解,为别人解惑,思考过程中自己也有新的认识。
    更重要的,这些或许是将来某天我要放弃这行时,最后坚持的理由——曾经热爱过的理想。

    一  、

    int a=3,b=4;
    void f(int x,int y)

    int temp;
     temp=a;a=b;b=temp; //试图交换a,b 

    f(a,b);
    cout<<a<<" "<<b<<endl;
    结果为   3、4 

    a和b的值都没有改变,只是将值传递给形参x、y,在被调函数内部使用,函数外无影响。

     

    二 、若要使a、b值发生改变如下

    void f(int *x,int *y)

    {

     int temp;
    temp=*x;*x=*y;*y=temp;
    }

    f(&a,&b);

    cout<<a<<" "<<b<<endl;

    结果 为  4、3

     

    三、还应注意

    #include<iostream>
    using namespace std;
    void f(int *p)
    {
    int a=3;
    p=&a; // 注意
    }

    int main()

    {
    int x=4;
    int *p1=&x;

    f(p1);
    cout<<*p1<<endl;

    return 0;
    }

    输出的结果是4,指针p1调用f函数后值并没有得到改变;p=&a 称之为      给指针赋值

    意思是给指针本身一个指向的对象;p=&a是相当于把函数的形参指针p指向a(即给指针赋值,此值是a的地址),但由于a是临时变量,函数调用完后即不存在了,所以实参p1是不会被改变的,*p1=4

     

    #include<iostream> 
    using namespace std;
    void f(int *p)
    ...{
    int a=3;
    *p=a; //不同之处

    int main()
    ...{
    int x=4;
    int *p1=&x;
    f(p1);
    cout<<*p1<<endl;
    return 0;
    }

    输出结果是3,指针p1在调用f函数后得到改变;*p=a称之为    通过指针进行赋值,

    意思是改变指针所指对象的值;*p=a就不同了,函数是值传递,实参p1传递给形参p的值是什么呢?当然是x的地址,也就是说,在函数f调用的过程中,形参指针p指向了x,然后进行的*p=a是通过指针进行赋值,改变了p指向的对象x,p1仍然指向x,故*p1=3

     

    四、引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。特别强调的是引用并不产生对象的副本,仅仅是对象的同义词

    void f(int &a,int &b)

     

    {

     int temp;

    temp=a;
     a=b;
    b=temp;

    }

    f(x,y)

     

    f(x,y)     c++自动把x,y的地址作为参数传递给f函数@王猛@关键@李宁

     

  • 相关阅读:
    网上零售是国内品牌开拓海外市场的最佳途径
    一个都不能少,海外B2C实战攻略全解
    我想和你一起浅浅淡淡的生活
    中国十大电子商务网站排名
    外贸B2C必读:外贸B2C入行指南(一)
    外贸B2C必读:外贸B2C入行指南(二)
    09年美国最热门的100个B2C网站,他们是怎么成功的?
    几个jsp模块
    【Quartz】【程序目录结构】/DetectNonWorkingDay/src/main/java/com/apple/sqm/dnwd/detect/delta/Detect.java
    Servlet 工作原理解析
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896822.html
Copyright © 2011-2022 走看看