1. 指针和引用区别
#include <stdio.h> #include <string.h> int main() { int number = 100; // 指针方式 int* p = &number; *p = 200; printf("number = %d\n", number); // 引用方式 int& r = number; r = 300; printf("number = %d\n", number); return 0; }
程序运行结果:
number = 200 number = 300
上面代码中,可以看到:
- 指针能够实现间接修改变量的值,引用也可以,并且引用的语法更简单;
- 指针可以初始化 NULL,指针必须初始化为与合法的空间关联;
- 指针可以随时修改指向,但是引用一旦初始化就无法修改指向;
- C++标准只规定了引用的语义,并没有规定引用如何实现。在大部分编译器中引用在C++内部是通过常量指针来实现,因此引用所占空间大小与指针大小相同,只是这个过程由编译器内部实现,引用相当于与 Type* const 类型的指针;
- 指针在 C/C++中可以使用,引用只能在 C++ 中使用。
2. 不同类型的引用
#include <stdio.h> int main() { // 1. 普通变量引用 int number = 100; int& int_ref = number; int_ref = 300; printf("number = %d\n", number); // 2. 常量引用 const int& const_ref = number; // const_ref = 200; // 3. 指针变量引用 int* p = NULL; int*& pointer_ref = p; pointer_ref = (int *)0x123; printf("p = %p\n", p); // 4. 右值引用(常量引用、右值引用才可以引用右值) const int& cref1 = 100; int&& cref2 = 100; printf("cref1 = %d,cref2 = %d\n", cref1, cref2); return 0; }