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(); 

}

 

posted @ 2020-03-30 15:36  c语言我的最爱  阅读(436)  评论(0编辑  收藏  举报