• C++参数传递(01)


    *是取值运算符,对地址使用可以获得地址中储存的数值;对于指针a,*a表示取a中的值
    &是地址运算符,对变量使用可以获得该变量的地址。    对于变量b,*b表示取b的地址

        别名(引用):主要用于做函数的形式参数。
        引用是复合类型,通过在变量前添加&符号来定义。不能定义引用类型的引用!!除了作为形参,定义引用时必须初始化!!如:

    int ival= 1024;
    int&ref = ival;
    int&ref1;            error   未关联
    int&ref2 = 10;        error,必须关联到一个对象
    
    ps:不能将引用再绑定到另一个对象!!
     
    const引用是指向const对象的引用,可以读取但不能修改const引用。
    constint ival = 1024;
    int i =10;
    constint &ref = ival;
    constint &r = 42;          right!不同于普通引用!
    constint &r2 = r+i;         right!不同于普通引用!
    int&ref2 = ival;           error!普通引用!
    
    非const引用只能绑定到与该引用同类型的对象。
    doubledval = 3.14;
    int&ri = dval;
    上述代码会被编译器解释为:
    doubledval = 3.14;
    int temp= dval;
    int&ri = temp;
    所以改变ri不会修改dval,而是修改了temp。所以建议给ri加上const,即const int &ri=dval;
    参数传递分为:值传递,指针传递,引用传递
    
    
    #include "stdafx.h"#include <iostream>
    using namespace std;
    
    //值传递
    void swap1(int p,int q)    //传过来的参数复制一份副本,所以造作对传过来的参数没有影响
    {
        int temp;
        temp=p;
        p=q;
        q=temp;
    }     //很明显,交换失败
    
    //指针传递,函数体内只有指针值的变化
    void swap2(int *p,int *q)  //把指针存的是地址,所以调用时要传对象的地址
    {
        int temp;                     
        temp=*p;        //把p(*指针是取指针指向地址的值)的值赋给temp
        *p =*q;           //把q的值赋给p
        *q=temp;        //再把temp的值赋给*q
    }      //交换成功,实际是对指针指向地址的值的操作,p和q的指针并没有改变
    
    //指针传递,函数体内只有指针的变化
    void swap3(int *p,int *q)
    {
        int *temp;    //指针
        temp=p;      //把p的指针(指向的地址),赋给temp
        p=q;            //把q的指针复制给p
        q=temp;      //再把temp指针赋值给q
    }    //交换失败,虽然p=2,q=1.但是只是把p和q的指针值改变了,即p指向b,q指向a了,实际上a和b的值并没有改变
    
    //引用传递,这时函数并没有对形参对象初始化,即没有指定形参对象是哪个对象的别名。
    //在函数调用时,实参对象名传给形参对象名,形参对象名就成为实参对象名的别名。
    //实参对象和形参对象代表同一个对象,所以改变形参对象的值就是改变实参对象的值。  
    //实际上,在虚实结合时是把实参对象的地址传给形参对象,使形参对象的地址取实参对象的地址,从而使形参对象和实参对象共享同一个单元。这就是地址传递方式。  
    //通过使用引用参数,一个函数可以修改另外一个函数内的变量。因为引用对象不是一个独立的对象,不单独占用内存单元,而对象指针要另外开辟内存单元(其内容是地址),所以传引用比传指针更好。  
    //注意:虽然系统向形参传递的是实参的地址而不是实参的值,但实参必须使用对象名。
    void swap4(int &p,int &q) //引用传递时,对形参的操作等同于对实参的操作,即传递的不会是实参的副本,而就是实参 { int temp; temp=p; p=q; q=temp; } int main() { int a=1,b=2; swap1(a,b); //swap2(&a,&b); //swap3(&a,&b); //swap4(a,b); return 0; }
  • 相关阅读:
    TS的一些小东西
    关于Vue懒加载问题
    react子传父
    MYSQL存储过程以及结果集
    MYSQL视图 事务 游标 索引及其使用
    MYSQL数据库的修复方法MAC
    MYSQL用户授权以及SQL语句
    MySQL数据库基础知识
    JavaScript对象
    JavaScript控制语句
  • 原文地址:https://www.cnblogs.com/aeolian/p/7684903.html
Copyright © 2020-2023  润新知