常量指针、指针常量和引用

网上的常量指针和指针常量很容易混淆,这里推荐一篇文章,讲的特别好

理清C++常量指针和指针常量的区别

1、指向常量的指针 const int *p = &a;

在定义指针变量的时候,数据类型前用const修饰

// 定义
int a = 10;
const int *p = &a;

这里就是 这个指针的指向的变量 可以 通过指针改变,但是指针指向的变量的值 不可以 通过指针改变

// 举例
#include "stdio.h"

int main(){

	int a = 10, c = 30;
	const int *p = &a; // 常量指针
	// 指针p 指向 a
	// 修改 指针的指向 (可以)
	p = &c; 
	// 修改 指针指向的变量的值 (不可以)
	*p = 30; // 这里是会编译报错的
	
	return 0}
2、本身是常量的指针 int* const p = &a;

本质上这是一个常量,是由指针来修饰的

// 定义
int a=10;
int * const p = &a;

这里就是 指针的 指向 不可以 通过指针改变,但是指针指向的变量的值 可以 通过指针改变

#include "stdio.h"'

int main(){

	int a = 10, c = 30;
	int * const p = &a; // 指针常量
	// 指针p 指向 a
	// 修改 指针指向变量的值 (可以)
	*p = 50;
	// 修改 指针的指向(不可以)
	p = &c; // 不可以,这里是会编译报错的

	return 0;
}
3、引用

引用只是对指针进行了简单的封装,底层依然是通过指针实现的
引用必须在定义的同时进行初始化,并且以后也要从一而终,不能在引用其它数据

int a = 10;
int &b = a; // 引用
// 其实就相当于
int * const b = &a;

引用和 const

  • 指向常量的引用(reference to const)

    const int &b = a;
    
  • 没有 const reference,因为引用只是对象的别名,引用不是对象,不能用 const 修饰

    // 错误
    int & const b = a;
    

    因为 b 本来就不能改变指向,加上 const 是多此一举。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值