指针和const

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针和const相关的知识,希望对你有一定的参考价值。

指针指向常量,类似于常量引用,指向常量的指针(pointer to const)不能用于改变其所指对象的值;

const 指针,指针本身为常量(const pointer),必须 初始化,指针的值不能改变

typedef int *pint;类型别名

const pint cpint = 0; //cpint是指向int的常量指针

const pint *pi;          //pi是一个指针,它的对象是指向int的常量指针

不能将pint替换为int *

const int *cint = 0; //指向const int 的指针

const pint cpint = 0; //指向int的常量指针

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int ival = 1024;
 6     int ival2 = 2048;
 7     const int cival = 4096;
 8 
 9     const int *pcint = &ival; //指向常量的指针
10     cout << *pcint << endl;   //1024
11 
12     pcint = &ival2;          //指针的值可改变,指向的值不能改变
13     cout << *pcint << endl;  //2048
14     //    *pcint  = 4096;           //error:不能给常量赋值
15     int *const cpint = &ival; //常量指针(指针为常量)
16 //    cpint = &ival2;           //error:不能给常量赋值
17     *cpint = 4096;           // ok
18     cout << *cpint << endl;   //4096
19 
20     const int *const cpicp = &ival; //指向常量对象的常量指针(指针和指向的对象都是常量)
21 
22 //    cpicp = &cival;           //error:不能给常量赋值
23 //    *cpicp = 4096;            //error:不能给常量赋值
24 
25     typedef int *pint; //基本数据类型为指针
26     const pint cint = &ival; //常量指针
27     cout << cint << endl;    //0043FC60
28     cout << *cint << endl;   //4096
29 
30     const pint cint2 = &ival2;
31 //    cint = cint2;             //error:不能给常量赋值
32     *cint  = 512;             // ok
33 
34 //    pint const pcint = &ival2; //error 重定义:不同的类型修饰符
35 
36     const pint *pi = &cint; // pi是一个指针,对象是指向int的常量指针
37     cout << pi << endl;     //0043FC18
38     cout << *pi << endl;    //0043FC60
39     cout << **pi << endl;   //512
40 }

 

以上是关于指针和const的主要内容,如果未能解决你的问题,请参考以下文章

C++指针常量和常量指针,const修饰函数。

C++指针常量和常量指针,const修饰函数。

const_cast 用于引用和指针

共享指针和 const 正确性

指向 const 指针(或指向 const 的指针)

对容器中项目的 const-correct 指针访问