C++-reference(&) 表示代表

使用& 表示reference可以用当前的值来表示原来的那个值, 数的地址保持不变

相较于a = b;相当于是进行赋值操作

/*
& 表示引用
*/ 
#include <iostream>

using namespace std; 


int main(void) {
    int a = 10; 
    int& b = a; //b实际代表的变量就是a 
    cout << &a << endl; 
    cout << &b << endl; 
    b++; 
    cout << a << endl; 
    cout << b << endl;  

    int c = 20; 
    b = c; //表示进行赋值操作 
    cout << a << endl; 
    cout << b << endl; 

    cout << &a << endl; 
    cout << &b << endl; 
    cout << &c << endl; 

}

 使用reference进行位置交换操作,这里使用地址和&进行位置交换 

/*
使用reference 进行数据的交换 
*/
#include <iostream>

using namespace std; 

void swap(int *p_val, int *p_val1) {
    *p_val ^= *p_val1; 
    *p_val1^= *p_val; 
    *p_val ^= *p_val1; 
}

void swap1(int& p_val, int& p_val1) {
    p_val ^= p_val1;     
    p_val1 ^= p_val; 
    p_val ^= p_val1; //相当于对地址进行操作 
}

int main() {
    int a = 3, b = 5; 
    swap(&a, &b); 
    cout << "a = " << a << endl; 
    cout << "b = " << b << endl;  
    return 0; 
}

 void print(const Teacher& t) //为了加快数据传入的速度 

/*
使用Teacher& t 提高传参效率
*/ 
#include <iostream>

using namespace std; 

struct Teacher {
    char name[20]; 
    int age; 
    double salary; 
};
//使用& 可以加快传参的速度
void print(const Teacher& t) {
    cout << "这个学生的名字是" << t.name << "年龄是" << 
    t.age << "薪水是" << t.salary << endl; 
}

int main() {
    const Teacher t = {"李自成", 20, 20000}; 
    print(t); 


}

 int& func(void)  可以保证返回值不是一个临时的变量,是一个左值

/*
对于返回值进行reference 
*/ 
#include <iostream>

using namespace std; 

struct A {
    int data; 
    int& func(void) {
        return data; //返回的不是一个临时变量 
    }
};

int& foo(void) {
    static int num = 100; 
    return num; //返回局部变量引用 
}

int main() {
    A a = {200}; 
    int& r4 = a.func(); 
    a.func() = 200; //将data左值进行赋值, 因为使用的是&引用
    cout << a.data << endl; //200  
    cout << r4 << endl; //200 

    int& r5 = foo(); 
    cout << r5 << endl;  


}

进行函数的各种引用

/*
引用各种类型
*/ 
#include <iostream>

using namespace std; 

void func(void) {
    cout << func << endl; 
}    
int main() {
    int a = 10; 
    int *p = &a; 
    int **pp = &p; 
    int &r = a; 
    int* &rp = p; //表示指针引用
    int& rr = r; //普通引用  

    int i = 10, j = 20, k = 30; 
    int* p_arr[3] = {&i, &j, &k}; //数组指针 
    int arr[3] = {i, j, k}; 
    int (&rarr)[3] = arr; //表示引用数组
    void (*p_func)(void) = func; //表示函数定义  
    void (&r_func)(void) = func; //表示函数引用
    p_func(); 
    r_func(); 

}

 

原文链接: https://www.cnblogs.com/hyq-lst/p/12598967.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++-reference(&) 表示代表

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/338781

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午11:46
下一篇 2023年3月1日 下午11:46

相关推荐