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/C++几个常见概念分析(指针、引用 、const常量、#define)

(一):指针与引用的区别                 指针是什么,指针是一个变量(A)他值表示的是另一个变量(B)的地址。                 引用是什么,引用是一个变量(B)的另一个...

C++中的const用法【01】----常量与指针

const 的设计之初是用来代替#define,后来它的身影逐渐扩大到了指针,函数参数,函数返回值类型,类与对象以及成员函数中。const 虽然对他们的作用稍有区别,但思想仍然是统一的。 可以说co...

C++ 语法实验室之指针、常量const、字符串和等号初学误区理解

前言: 指针、常量、字符串和等号,这四个东西可以说贯穿你写的每一个Cpp文件,我大约记得我刚学的时候可是在这些东西中载了大跟头,前车之鉴啊,必须用笔记和文章形式好好理一理。 让我们先从最简单一句开...

指针常量与常指针CONST

  • 2010年06月14日 12:43
  • 296B
  • 下载

C++ Special:const关键字和常量指针 vs 指针常量

参考:http://blog.csdn.net/Eric_Jo/article/details/4138548 1、修饰primitive 变量,必须在定义的时候赋值。除了一个特殊情况: 将c...

const限定修饰符用法总结(常量,指针,迭代器,函数参数,成员函数)

转自:http://blog.csdn.net/youxueT_T/article/details/7606446 const限定修饰符用法总结(常量,指针,迭代器,函数参数,成...

关于两种复合类型--引用和指针以及const常量限定符的一些总结

引用(不能作为对象): 起一个另外的名字而已,好比如*文华今天叫小华,明天别人叫他小文,他还是他。 注意上述中的引用应该是指“小文”这个名字符号,而不是指小文其人,故引用不是对象!故不能定义引用的...

指针、引用、const常量三者之间的关系

一、说明 指针和引用均实现对其他对象的间接访问。 1、指针:存放另一个对象的地址。 1)指针本身就是一个对象,允许对指针赋值和拷贝,而且指针可以先后指向几个不同的对象。 2)指针可以在定义时不...

C语言之const常量(摘自C和指针)

C语言中我们可以使用const和define关键字声明常量,所谓常量就是指值不能修改的量。如下面的例子所示: int const a; const int a;         这两条语句...

const限定修饰符用法总结(常量,指针,迭代器,函数参数,成员函数)

在这里总结一下const限定修饰符的各种用法,都已经过vs2010测试。 1)  声明及初始化const常量。 在声明一个const常量时,必须对其初始化,否则会报错。 1 const in...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++ 常量指针 const*const
举报原因:
原因补充:

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