当前位置: 首页 > 科技观察

EasyC++、Const和指针

时间:2023-03-17 14:42:41 科技观察

大家好,我叫梁唐。这是EasyC++系列的第28篇,简单说说const和指针。指针和const我们知道const关键字修饰不可变变量,和指针一起使用会有很多微妙之处。关于用const修饰指针,有两种不同的方式。第一种是让指针指向一个常量对象,这样可以防止指针被用来修改指向的值。二是将指针本身声明为常量,这样可以防止改变指针指向的位置。让我们看看下面的细节。指向常量的指针首先是指向常量的指针,也就是说指针的类型是常量类型。所以写成:constint*p;可以理解为p是一个指针,它的类型是constint,是常量类型。它可用于指向常量类型或非常量类型。下面两种方法是合法的:intage=23;constint*p=&age;constdoubleprice=233;constdouble*pt=&price;但是反过来,将一个const类型的变量赋值给一个非const指针是非法的:constintage=23;int*p=&age;//Illegal如果非要这样做,可以使用const_cast运算符进行强制转换,this我们将在以后的文章中讨论。除此之外,还有一点很有意思。如果我们将一个非常量变量赋给一个const指针,虽然我们不能通过指针修改对应的值,但是可以修改变量:intage=23;constint*p=&age;*p=233;//非法age=233;//合法,我们不能修改指针指向的值,但是可以修改指针指向的位置:intage=23;intprice=233;constint*p=&age;p=&price;const指针上面我们介绍了const指针,还有一个指针叫做const指针。const指针是指指针本身是const修饰的,我们不能修改指针指向的位置。intage=23;int*constp=&age;但是我们可以修改指针指向的值:*p=2333;//合法的指针和内容是不可改变的。当然,我们也可以把这两种const叠加起来,让指针指向的对象和对象的值都不能被修改:constint*constp=&age;转载本文请联系编码员梁公众号。