c++ 常量指针 const*const

原创 2015年07月10日 17:23:27

1.什么是常量指针
我们可以使用const 来修饰指针,在用const 修饰指针时,我们可以指出,指针自身,指针所指的内容,为常量 const。当const修饰指针时,如果关键字const出现在 星号* 左边 表示的是指针所指的内容为常量,如果关键字const 出现在星号* 右边 表示的是指针本身为常量。如果const出现在星号*两边 表示 指针本身 和指针所指的内容都为常量,不能被修改。为了更清楚地说明const是如何修饰指针的,请看以下代码

#include<iostream>
using namespace std;

//测试 const关键字修饰指针
int main(void){

    int a = 3;//定义了一个整形变量a 并且用3来初始化变量a 这里a的     
              //值为3
    int b = 4;//定义了一个整形变量b ,用4来初始化变量 b 这里b 
              //的值为4
    int *pa = &a;//定义了一个指向整形的指针变量pa ,pa指向a 的
                 //地址 此时pa的值为 a的地址&a ,*pa 的值为3
                 //此时因为星号*前面和后面都没有const修饰,所以   
                 //不管是指针变量pa还是指针pa所指物都可以发生改    
                 //变


//指针本身发生改变

    pa = &b;//此时指针变量pa的指向发生了改变,把变量b的地址赋值给
           //了pa 是合法的,此时pa 的值为b的地址&b,*pa 的值为   
           //变量b的值4

//指针所指的内容发生改变

    *pa = a;//此时指针变量pa的指向没有发生改变,还是指向上一指令b
            //的地址,但是指针所指的内容已经由变量b 变为变量a 此
            //时*pa的值为变量a的值3

//const 修饰指针本身 指针本身不能发生改变,指针所指的内容可以改变 

    int* const pc = &a;//定义了一个指向整形变量的常指针pc,并且
                       //把变量a的地址&a 赋给 pc 此时 pc 指   
                       //向变量a的地址&a,*pc 的值为变量a 等
                       //于3
    //pc = &b;      //编译器报错,表达式必须是可修改的左值,因为               
                    //pc 为常指针,指针本身不能发生改变
    *pc = b;      //可以通过,指针pc 所指的内容是可变的,此时把 
                  //变量b 赋给 pc所指的内容,*pc 此时由a的值3
                  //变为b的值4


//const 修饰指针所指的内容,把const放在* 左边,此时指针本身pd可以发生改变,指针所指物*pd不能发生改变

     const int * pd = &a;//定义另一个指针变量pd ,pd所指的内容*pd为常量,并且把变量a的地址&a 赋给pd ,此时指针变量pd 的值为变量a的地址&a
    //*pd = b;//编译器报错  “不能给常量赋值”此时 指针变量pd所指的内容为常量,不能发生改变


    //const 既修饰指针本身 又修饰指针所指的内容 

     const int* const pe = &a;//此时定义了一个指向常量型的指针常量 pe ,并且把变量a的地址赋&a 赋值给pe,此时无论指针pe 还是指针pe所指的内容都不能发生改变

    //pe = &b; //编译器报错 “表达式必须为可修改的左值” 
    // *pe = b;// 编译器报错 “表达式必须为可修改的左值”



    cout << *pa <<endl;




    return 0;
}

2.怎么使用常量指针?
因为常量定义式通常被放在头文件内(以便被不同的源码引入)
,因此有必要将指针 (而不是指针所指的内容)声明为const
如 int const b = &a;如果在头文件内定义一个常量(不变的量)const必须写两次, 如: const int const b = &a ;

C语言中的const用法以及常量指针与指针常量(有口诀!)

编了这样的口诀,记住,应该不难: const(*号)左边放,我是指针变量指向常量; const(*号)右边放,我是指针常量指向变量; const(*号)两边放,我是指针常量指向常量; 指针变量...
  • xiaocheng198810
  • xiaocheng198810
  • 2014年11月27日 10:19
  • 3220

const 与 shared_ptr

const 与 shared_ptr注意: 需要c++11的支持 const 与 shared_ptr 之间的组合不是很常见,最多的也只是在传递参数时:shared_ptr func(const sh...
  • liu798675179
  • liu798675179
  • 2016年08月20日 14:53
  • 689

常量指针、指针常量、C++类型转换

一、const应用 1.const关键字,他后面内容的不可修改,一般来说,其修饰的变量不可再进行赋值操作; 2.常量指针 int a = 3; int b = 4; const int* pt = &...
  • zz460833359
  • zz460833359
  • 2015年09月10日 22:05
  • 810

常量指针和指针常量巧妙记忆方法

1.常量指针通常有两种表示方法: method 1: const double * ptr; method 2: double const *ptr; 2.指针常量通常表示为: double ...
  • a15261893837
  • a15261893837
  • 2017年04月25日 21:12
  • 272

C++ reinterpret_cast,const_cast等 显式类型转换总结

reinterpret_cast,const_cast,static_cast,dynamic_cast 显式类型转换 Cpp代码 #include int main(void) ...
  • jianguo_liao19840726
  • jianguo_liao19840726
  • 2013年11月25日 09:47
  • 1131

C++ const_cast强制去掉常量属性

#include using namespace std; const int* find(int val,const int* t, int n); int main(){ int a[]=...
  • Slience_Perseverance
  • Slience_Perseverance
  • 2014年02月23日 01:52
  • 8481

C++:const和引用

上面一篇博客我们已经介绍了基本的const,对于这篇博客,我先说下引用是什么 引用说白了就是为对象另外起了一个名字,引用类型引用另一种类型。 定义方式: 将声明符写成&d的形式来定义引用类型其中d是声...
  • lishuzhai
  • lishuzhai
  • 2016年01月28日 18:24
  • 2259

c++ class function const

const除了可以修饰变量外,其还可以在类函数的末尾添加const 一般的成员函数如: class A { public: void modify(int n); };实际的modify...
  • qq_16097611
  • qq_16097611
  • 2016年12月14日 11:01
  • 274

C++类const成员变量初始化

class CExample { public: CExample():m_a(1),m_b(2){/*m_a = 1; compile error*/} CExample(const CExam...
  • junlon2006
  • junlon2006
  • 2016年11月08日 16:37
  • 1603

关于C++ const 的全面总结 取代#define

关键字const叫做限定符,因为它限定了声明的含义 一种常见的做法是将名称的首字母大写(例如:Month),已提醒是常量 另一种约定是将整个名称大写 ##################...
  • u012005313
  • u012005313
  • 2015年07月07日 15:00
  • 1021
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++ 常量指针 const*const
举报原因:
原因补充:

(最多只允许输入30个字)