在 C 语言中,使用指针(Pointer)可以间接获取、修改某个变量的值。
在 C++ 中,使用引用(Reference)可以起到跟指针类似的功能。
引用相当于是变量的别名,基本数据类型、枚举、结构体、类、指针、数组等都可以有引用。
对引用做计算,就是对引用所指向的变量做计算。
在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”。
#include <iostream>
using namespace std;
int main() {
int age = 10;
int height = 20;
int &ref = age;
ref = 20;
ref += 30;
cout << age << endl;
ref = height;
ref = 11;
cout << age << endl;
cout << height << endl;
getchar();
return 0;
}
可以利用引用初始化另一个引用,相当于某个变量的多个别名。
#include <iostream>
using namespace std;
int main() {
int age = 10;
int& ref = age;
int& ref1 = ref;
int& ref2 = ref1;
ref += 10;
ref1 += 10;
ref2 += 10;
cout << age << endl;
getchar();
return 0;
}
不存在 “引用的引用”、“指向引用的指针”、“引用数组”。
引用存在的价值之一:比指针更安全、函数返回值可以被赋值。
#include <iostream>
using namespace std;
void swap(int *v1, int *v2) {
int tmp = *v1;
*v1 = *v2;
*v2 = tmp;
}
int main() {
int a = 10;
int b = 20;
swap(&a, &b);
cout << "a = " << a << ", b = " << b << endl;
getchar();
return 0;
}
#include <iostream>
using namespace std;
void swap(int &v1, int &v2) {
int tmp = v1;
v1 = v2;
v2 = tmp;
}
int main() {
int a = 10;
int b = 20;
swap(a, b);
cout << "a = " << a << ", b = " << b << endl;
int c = 2;
int d = 3;
swap(c, d);
cout << "c = " << c << ", d = " << d << endl;
getchar();
return 0;
}
引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针。
一个引用占用一个指针的大小。
#include <iostream>
using namespace std;
struct Student {
int age;
};
int main() {
cout << sizeof(Student) << endl;
getchar();
return 0;
}
#include <iostream>
using namespace std;
struct Student {
int *age;
};
int main() {
cout << sizeof(Student) << endl;
getchar();
return 0;
}
#include <iostream>
using namespace std;
struct Student {
int &age;
};
int main() {
cout << sizeof(Student) << endl;
getchar();
return 0;
}
|