不可或缺 Windows Native (12) - C++: 引用类型

[源码下载]


不可或缺 Windows Native (12) - C++: 引用类型



作者:webabcd


介绍
不可或缺 Windows Native 之 C++

  • 引用类型



示例
CppReference.h

复制代码
#pragma once 

#include <string>

using namespace std;

namespace NativeDll
{
    class CppReference
    {
    public:
        string Demo();
    };
}
复制代码


CppReference.cpp

复制代码
/*
 * 引用类型
 *
 * 引用也可以称之为“别名”
 *
 * 注:
 * 1、声明引用时,必须同时初始化
 * 2、被引用的对象必须已经分配了空间
 * 3、被引用的对象不能为地址,即指针变量、数组变量等不能被引用
 */

#include "pch.h" 
#include "CppReference.h" 

using namespace NativeDll;

void reference_demo1();
void reference_demo2();
void reference_demo3();

string CppReference::Demo()
{
    // 引用的用法
    reference_demo1();

    // 引用和指针的区别
    reference_demo2();

    // “引用”也可以作为函数的返回值
    reference_demo3();


    return "看代码及注释吧";
}



// 引用的用法
void reference_demo1()
{
    int a1, a2 = 10;
    // &b - 代表定义一个名为 b 的引用。此处的“&”是类型说明符,表示 b 是一个引用
    // 声明了一个引用,则必须同时为其初始化
    int &b = a1; // b 是 a1 的引用,即 b 是 a1 的别名
    
    b = a2; // a1 和 b 都等于 10
    a1 = 100; // a1 和 b 都等于 100
    b = 1000; // a1 和 b 都等于 1000
}



// 引用和指针的区别
void reference_demo2()
{
    int m = 1;
    int n = 2;

    int *x = &m;
    int *y = &n;

    int &s = m;
    int &t = n;

    void my_swap(int *i, int *j); // 通过指针,交换两个整型
    void my_swap(int &i, int &j); // 通过引用,交换两个整型

    my_swap(x, y); // 调用 void my_swap(int *i, int *j); 结果:m=2,n=1
    my_swap(s, t); // 调用 void my_swap(int &i, int &j); 结果:m=1,n=2
    my_swap(m, n); // 调用 void my_swap(int &i, int &j); 结果:m=2,n=1
}

// 通过指针,交换两个整型
void my_swap(int *i, int *j)
{
    // 形参是实参的副本,这里会将指针复制一份出来,函数调用结束后立即释放

    int temp;
    temp = *i;
    *i = *j;
    *j = temp;
}

// 通过引用,交换两个整型
void my_swap(int &i, int &j)
{
    // 如果采用“引用”的方式,i 和 j 其实就是对应的那两个实参本身

    int temp;
    temp = i;
    i = j;
    j = temp;
}



// “引用”也可以作为函数的返回值
int &reference_function();
int reference_i = 0;
void reference_demo3()
{
    reference_function() = 999;

    // 此时 reference_i 的值为 999
}

int &reference_function()
{
    return reference_i;
}
复制代码



OK
[源码下载]

posted @   webabcd  阅读(1467)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
历史上的今天:
2009-05-18 稳扎稳打Silverlight(30) - 2.0Tip/Trick之Silverlight.js, Silverlight.supportedUserAgent.js, 自定义启动界面, 响应鼠标滚轮事件
点击右上角即可分享
微信分享提示