const与一级指针的结合应用

const与一级指针的结合应用

        我们以后给空指针都是用nullptr。因为在C++中,NULL是空指针或者0值。
const修饰的量 叫常量

和普通变量的区别是什么? C++有两点区别?
1.编译方式不同 2.不能作为左值了

C++中const修饰的量常出现的错误是:
1.常量不能再作为左值 ->不能直接修改常量的值
2.不能把常量的地址泄露给一个普通的指针或者普通的引用变量 ->不可以间接修改常量的值
这2点是C++编译器可以检测出来报错的。

我们看下面代码:

编译通不过。

 那怎么转换呢?

const和一级指针的结合:有4种情况

C++的语言规范:const修饰的是离它最近的类型

const int *p = &a;

 const修饰的就是int了,因为int本身就可以组成一个类型。
但是我们关心的是const修饰的是什么表达式。什么表达式不能再被赋值了。

我们把修饰的类型去掉,就是const修饰的表达式了:*p
*p就不能被赋值了。
*p被const修饰了,const修饰了指针p的指向,指向的东西不能被赋值了。

p=&b

但是指针本身可以被赋值,因为p本身没有被const修饰。
p可以任意指向不同的int类型的内存,但是不能通过指针间接修改指向的内存的值。

int const* p;

const修饰的是离它最近的类型,但是*不是类型哦,不能用 * 定义变量所以修饰的还是int。

int *const p = &a; 

        这个const修饰的是int *了,因为 * 自己不能作为类型,所以再往前走,就是int *了
        去掉const修饰的类型,就是const修饰的表达式,就是p本身了,p本身是常量,不能被修改,但是 *p没有被const修饰,可以修改。
        这个指针p现在是常量,不能再指向其它内存,但是可以通过指针解引用修改指向的内存的值。

const int *const p = &a;

前面的const修饰的类型是int,所以const修饰的表达式是*p,所以 *p不能被赋值。
后面的 const修饰的类型是int *,所以修饰的表达式是p,所以p不能被赋值。

这样*p就不能被解引用了。

下面几种写法都可以指向a:

我们看这个是什么情况?

 我们先来看下面:

 const如果右边没有指针*的话,const是不参与类型的!!!
const只用来表示q2是常量

总结const和指针的类型转换公式:
左值         =   右值 
int*        =    const int*    是错误的!
const int*  =    int*          是可以的!

 

 Int *q=p是错误的。const int * 不能赋值给int *

因为 const右边有 *了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值