zoukankan      html  css  js  c++  java
  • C++入门篇三

    引用:&

    &放在左边就是引用,放在右边就是取地址

    int  main() {
        //引用的类型必须相同,一经引用,不可以在被引用
        int a = 100;
        int  &b = a;//b引用a之后,两个同时都会改变,此时b已经指向a了,如果在来一个c的话,不能在去指向c。b和a的类型必须相同
        b = 304;//必须初始化,int就是初始化,实质上是*b=304,默认会加上*
        printf("a:%d,b:%d
    ", a, b);
    }

    给数组起别名:

    //给数组起别名
    
    int  main() {
        int  arr[10];
        for (int i=0;i < 10;i++) {
            arr[i] = i;
        }
    
        //用&引用,起别名
        int (&parr)[10] = arr;//用parr引用arr,相当于是arr重新赋值给了parr
        for (int i = 0;i < 10;i++) {
            cout << parr[i] << endl;
    
        }
    
    }

    第二种方式起别名,typedef

        //第二种方式起别名
        typedef int Arrpy[10];
        Arrpy  &parr2 = arr;
        for (int i = 0;i < 10;i++) {
            cout << parr2[i] << " ";
        }
        cout << endl;

    //尽量使用const替代define
    //define宏常量没有类型概念
    //define宏没有作用域概念

     

     

    参数的传递方式:

    值传递:

    void  swap1(int a,int b) {
        int temp = a;
        a = b;
        b = temp;
    
    }
    
    void  s1(){
        int a = 32;
        int  b = 43;
        swap(a, b);//传递;两个值进去
        cout << "a:" << a << "   b:"<<b << endl;
    }

     

    指针传递:

    //指针传递
    void  swap2(int  *a,int  *b) {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    
    void  s2() {
        int  a = 20;
        int  b = 65;
        swap2(&a, &b);
        cout << "a:" << a << "b:" << b << endl;
    
    }

    运行结果:

    引用传递:

    //引用传递
    void  swap3(int  &a,int  &b) {
        int  temp = a;
        a = b;
        b = temp;
    }
    void   s3() {
        int  a = 342;
        int  b = 545;
        swap3(a, b);
        cout << "a:" <<a << "b:" << b << endl;
    
    
    }
    int  main() {
        s3();
    }

     如果函数的返回值是引用的话,那么可以是作为左值的操作

    
    int  & test07(){
        static  int  a = 120;
        return  a;
    }
    int  main() {
        int  &res = test07();//内部就是int  * const  res=&test07();内部就是一个指针常量
        cout << res <<endl;
        
    }

    注意:不要返回函数局部变量的引用

    引用的本质就是在C++内部实现的指针的常量,指针的本质就是一个指针常量

    利用指针来开辟内存空间:

    struct Person2
    {
        int  age;
        string  name;
    };
    
    //利用指针来开辟空间
    void  test10(Person2*  &p) {//这边引用,p就是传过来的指针,就是引用
        p = (Person2*)malloc(sizeof(Person2));
        p->age = 43;
    }
    int  main() {
        Person2  *p1=NULL;
        test10(p1);//相当于传了一个指针过去,&p1>>>>>>>
        cout << "age" << p1->age << endl;
    }

    用指针来接受:**p

    void  malloc1(Person2 **p) {
        //用指针来接收,**p就是person2对象,*p就是person2指针,p就是person对象的指针的指针
        *p = (Person2*)malloc(sizeof(Person2));//强制转换
        (*p)->age = 54;
        cout << "age:" << (*p)->age << endl;
    }
    void  test11() {
        Person2  *p1=NULL;
        malloc1(&p1);//
    }
    int  main() {
        test11();
    
    }

  • 相关阅读:
    [转]PostgreSQL 逻辑结构 和 权限体系 介绍
    [转]常见的动态规划问题分析与求解
    [转]如何在Windows 10中更改文件夹背景颜色
    []如何在Windows 10中更改文件夹背景颜色
    [转]Jackson 解析json数据之忽略解析字段注解@JsonIgnoreProperties
    [转]使用自定义HttpMessageConverter对返回内容进行加密
    php+redis实现消息队列
    利用redis List队列简单实现秒杀 PHP代码实现
    redis 缓存击穿 看一篇成高手系列3
    redis 延时任务 看一篇成高手系列2
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10674658.html
Copyright © 2011-2022 走看看