复杂引用

简介:  1.通过引用来引用数组(一维数组) #include <iostream> #include <stdlib.h>   /*引用就是给原来的变量有一个别名同一个地址*/ void main() {     int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };


1.通过引用来引用数组(一维数组)

#include <iostream>

#include <stdlib.h>

 

/*引用就是给原来的变量有一个别名同一个地址*/

void main()

{

    int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    int(&ra)[10](a);

    int i = 0;

    for (auto data:ra)  //C++11的循环

    {

        data = i + 5;

        std::cout << data << std::endl;

    }

    std::cout << a << " " << ra << std::endl;

    std::cout << &a << " " << &ra << std::endl;

 

    system("pause");

}

2.引用二维数组的方式

#include <iostream>

#include <stdlib.h>

 

void main()

{

    int a[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    //引用就是给原来的变量有一个别名同一个地址

    int(&ra)[2][5](a);

    for (int i = 0; i < 2;i++)

    {

        for (int j = 0; j < 5;j++)

        {

            std::cout << " " << ra[i][j];

        }

        std::cout << "\n";

    }

 

    std::cout << a << " " << ra << std::endl;

    std::cout << &a << " " << &ra << std::endl;

 

    system("pause");

}

 

3.引用函数指针

#include <iostream>

#include <stdlib.h>

 

int jia(int a, int b)

{

    return a + b;

}

 

int jian(int a, int b)

{

    return a - b;

}

 

//函数指针int (*rp)(int a,int b)

void change(int(* & rp)(int, int))

{

    rp = jian;

}

 

int(*& changep(int(*&rp)(int, int)))(int, int)

{

    rp = jian;

    return rp;

}

 

void main()

{

    int(*p)(int a, int b)(jia);

    std::cout << p(1, 2) << std::endl;

    change(p);

    std::cout << p(1, 2) << std::endl;

 

    std::cout << "-----------------------" << std::endl;

    p = changep(p);

    std::cout << p(1, 2) << std::endl;

 

    system("pause");

}

4.数组中的元素不能为引用

5.引用的本质是指针,直接sizeof引用,就是引用的数据大小,引用变量占据4个字节

#include <iostream>

 

class MyClass{

    char & a;

    char & b;

    char & c;//引用的本质是指针,直接sizeof引用,就是求引用的数据大小

    //引用变量占据4个字节

};

 

void main()

{

    int num = 10;

    int & rnum(num);

    double db = 10.9;

    double & rdb(db);  //直接作用引用的变量

 

    std::cout << sizeof(rnum) << std::endl;

    std::cout << sizeof(rdb) << std::endl;

    std::cout << sizeof(MyClass) << std::endl;

    system("pause");

}

运行结果如下:

 

 

 

#include <iostream>

 

int  getdata(int && num)//右值引用,节约内存拷贝,内存优化所必须

{

    std::cout << num << std::endl;

    num += 10;

    return num;

}

 

void  main7()

{

    int a = 5;

    int b = 4;

 

    std::cout << getdata(a + 1) << std::endl;

    system("pause");

}

 

//左值,一般可以取地址就是左值

//右值某些情况可以,某些情况不可以

void main8()

{

    int a = 3;

    int b = a + 1;//右值->左值

    std::cout << getdata(std::move(a)) << std::endl;

    //std::move将左值转换为右值,C++11

}

void main9()

{

    //const int num(6);

    char str[10]("hello");//限定字符串不被修改

    const char *pc(str);//指向常量的指针限定了指向的数据无法修改,+1+2+3

    str[3] = 'x';//可以,

    //pc[3] = 'y';

    //*(pc + 3) = 'y';

    pc = "world";

    system("pause");

}

 

void main10()

{

    char str[10]("hello");

    const char(&rstr)[10](str);//常量引用

    const char(&rrstr)[10](rstr);//引用可以给另一个引用初始化

    str[4] = 'X';

    //rstr[4] = 'Y';

}

 

void  main11()

{

    int(*p)(int a, int b)(jia);

    std::cout << p(1, 2) << std::endl;

    int(*const &rp)(int a, int b)(p);//引用函数指针

    //rp=jian;//()仅仅适用于初始化

}

目录
相关文章
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
288 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
408 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
132 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1664 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
912 61