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(); }
每天更新pyQt5内容