const修饰指针有三种情况
1. const修饰指针 --- 常量指针
2. const修饰常量 --- 指针常量
3. const即修饰指针,又修饰常量
- ```c++
- int main() {
-
- int a = 10;
- int b = 10;
-
- //const修饰的是指针,常量指针,指针指向可以改,指针指向的值不可以更改
- const int * p1 = &a;
- p1 = &b; //正确
- //*p1 = 100; 报错
-
-
- //const修饰的是常量,指针指针常量,指针指向不可以改,指针指向的值可以更改
- int * const p2 = &a;
- //p2 = &b; //错误
- *p2 = 100; //正确
-
- //const既修饰指针又修饰常量
- const int * const p3 = &a;
- //p3 = &b; //错误
- //*p3 = 100; //错误
- system("pause");
- return 0;
- }
- #include
- #include
- #include
- using namespace std;
-
- int main()
- {
- int a = 10;
- int b = 20;
- int &c = a;
- cout << &c << endl;
- cout << &a << endl;
-
- int *const p = &a;
- cout << p << endl;
-
- system("pause");
- return 0;
- }
综上:
1. 数据类型:
引用: 引用是一个别名,它引用了另一个变量或对象。引用必须始终与其引用的对象具有相同的数据类型。在C++中,引用通常通过 & 操作符声明,如 int &ref = original;。
指针: 指针是一个包含内存地址的变量。指针可以指向任何数据类型,包括其他指针。在C/C++中,指针通过 * 操作符声明,如 int *ptr = &value;。
2. 内存操作:
引用: 引用在编译时被解析为其引用的对象的地址。在使用引用时,你不需要关心地址操作,因为它们是隐式的。
指针: 指针需要显式地使用地址操作符 & 和解引用操作符 * 来访问或修改数据。这意味着你可以更灵活地操作内存,但也需要更多的谨慎,以防止悬挂指针等问题。
3. 安全性:
引用: 由于引用在创建后不能更改其引用的对象,因此引用相对较安全,不容易出现空引用错误。
指针: 指针可以在运行时重新分配到不同的内存地址,这可能导致悬挂指针、野指针等问题,因此需要更小心地处理指针,以确保内存安全。
4. 语法:
引用: 引用的语法通常更简洁,不需要使用 * 运算符来访问数据。
指针: 指针的语法相对更复杂,需要使用 * 运算符来解引用指针