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

     

  • 相关阅读:
    ctf web 百度杯”CTF比赛 九月场Upload i春秋
    ctf web 西普实验吧 登陆一下好吗 MySQL隐式转化 MySQL表达式的计算顺序
    Firefox 47.0.1
    给数组原型添加方法
    JS中几种常见的数组算法(前端面试必看)
    进制转换技巧解析
    redis通过6379端口无法连接服务器
    阿里云图片或文件上传 启动时报Error creating bean with name 'ossClient'问题
    20170628-三七互娱-测试工程师(提前批)
    20170514-vivo-软件工程师Java(提前批)
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896822.html
Copyright © 2011-2022 走看看