• 函数形参 原型、指针、引用、


    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函数@王猛@关键@李宁

     

  • 相关阅读:
    java学习笔记05--字符串 .
    java学习笔记04--数组
    java学习笔记07--日期操作类
    java学习笔记14--动态代理
    java学习笔记09--反射机制
    java学习笔记06--正则表达式
    java学习笔记08--泛型
    java学习笔记10--枚举
    java学习笔记11--Annotation
    交叉熵代价函数
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896822.html
Copyright © 2020-2023  润新知