- 指针和引用区别 {#title-0} =====================
#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++ 中使用。
- 不同类型的引用 {#title-1} =====================
#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;
}