关闭

c++ 常量指针 const*const

标签: const修饰c++const常量指针
245人阅读 评论(0) 收藏 举报
分类:

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 ;

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16113次
    • 积分:455
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    最新评论