当前位置:网站首页 > 办公教程 > 正文

C++指针常量,常量指针以及, 引用和指针的区别

访客 发布于2023-10-02 办公教程 91

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;
}
本质: ** 引用的本质在 c++ 内部实现是一个指针常量 .** (指针常量 指正常量的 指向不可修改,指向的值可以修改)



#include <iostream>
#include <vector>
#include <algorithm>
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. 语法:

  • 引用: 引用的语法通常更简洁,不需要使用 * 运算符来访问数据。

  • 指针: 指针的语法相对更复杂,需要使用 * 运算符来解引用指针





Copyright 571400.cn.Some Rights Reserved.琼ICP备20000547号