指针和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 }

 

posted @ 2017-09-29 12:00  JessieM  阅读(194)  评论(0编辑  收藏  举报