C++ 引用变量(十二)-- & b *b和C的传递指针形参一样效果

本文深入探讨了C++中引用的概念及应用,包括基本语法、如何使用引用提高函数效率,以及引用与指针的区别。通过具体实例,展示了引用在不同场景下的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include <iostream>
#include <string>
using namespace std;

//引用用于类对象
string  gestString(const string &s1 , const string &s2)
{
    
    //创建临时变量
    string temp;
    //字符串拼接
    temp = s2 + s1 + s2;
    
    
    return temp;//注:如果是返回引用 &,不允许使用临时变量,这样导致引用指向一个已销毁的内存地址;
    
    
}



//引用用于结构体
struct tree {
    int t;
    int f;
    long k;
};

void gestStruct(tree &g)
{
    //临时拷贝
    g.t = 100;
}



//普通函数形参为引用
void gest2(int g)
{
    //两个变量,两个名称, 不可影响传入变量的原始值
    g = 9999;
}


void gest(int &g)
{
    //一个变量,两个名称, 直接关联传入变量值
    g = 100;
}


void gestPoint(int *g)
{
    //指针地址一样,直接关联传入变量值
    int i = 200;
    *g = i;
}


int gestConst(int const &g)
{
    //引用参数为 const可以只使用,不改变
    return g*g;
}




int main(int argc, const char * argv[]) {

    
    int a = 10;
    
    //1、以下等价,b、bb内存地址和a是一样
    int & b = a;
    int &c = a;
    //    int & f; //错误语法,初始化时必须赋值
    int *const bb = &a;  //说明引用变量其实是对a的指针和值复制,只能在初始化时设置,更接近于const指针,只能效忠于a

    a = 20; //当引用变量或被引用的值发生改变,所有对象值都改变
    
    int t = 20;
    b = t;
    
    
    //2、作为函数形参传递引用
    cout << "传值前的 t = " << t << endl;
    gest(t);
    cout << "传值给引用函数后的 t = " << t << endl;
    /**
     打印:(可改变)
     传值前的 t = 20
     传值给引用函数后的 t = 100
     */
    
    
    //3、作用:函数内部改变引用变量的值;
    //如果需要对函数的实参要求改变后,值也跟着改变,那么值传递都不起作用
    //示例:几种和引用对比
    gestPoint(&t);
    cout << "指针传值后的 t = " << t << endl;
    /**
     打印:(可改变)
     传值给引用函数后的 t = 200
     */
    
    
    gest2(t);
    cout << "值传递后的 t = " << t << endl;
    /**
     打印:(不可变)
     传值给引用函数后的 t = 200
     */

    
    gestConst(t);
    cout << "const值传递后的 t = " << t << endl;
    /**
     打印:(不可变)
     const值传递后的 t = 200
     */
    
    
    tree tr1 = {1,2,3};
    gestStruct(tr1);
    cout << "传入结构引用后" << tr1.t << endl;
    /**
     打印:
     传入结构引用后100
     */
    
    tree tr2 = {44,122,5678};
    
    
    
    //4、将引用用于类对象
    string input;
    string copy;
    string result;
    copy = gestString(input,"sdff"); //string 可以接受 char * 类型字符串,内部实现转换
    
    
    
    
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值