【c++】const指针

【c++】const指针

 参考:《c++从入门到精通》 人民邮电出版社

       const表示的量是一个常量,那指针类型的数据能不能也使用const呢?

       当然可以。可以在指针类型的前面或后面使用关键字const。const指针有下列两种形式:

                const int  *p1 =&a;  //指向整型常量的指针,其指向的值不能改变

                int* const p2 =&b;   //指向整型常量的指针,其指向的地址不能改变

       其中,p1是指向整型常量的指针,其指向的值(*p1)不能改变,但可以改变它所指向的地址和变量的值(a的值);p2指向整型常量的指针,其指向的地址(&b)不能改变,但可以改变它所指向的值(*p2)。

 下面看编程实例:

    原始:

#include<iostream>
using namespacestd;
int main()
{
       int a=1,b=2,c=3;
       const int *p1;  //正确
       int* const p2;   //会报错!!!未初始化
     
       p1=&a;
       p2=&b;  //错误!p2指向的地址不能改变
       cout<<"*p1:"<<*p1<<endl;
       cout<<"*p2:"<<*p2<<endl;
       return 0;
}

    其中,int* const p2; // 未初始化,会报错。这是因为p2指向的地址不能改变,所以需要给他初始化。

        

修改后:

int* constp2=&b;   //初始化,通过

再修改:

int* constp2=&b;   //初始化,通过
p2=&c; //错误

第二句会报错,是因为p2指向的地址不能改变,它只能指向b,不能指向其他变量(地址)。但可以改变*p2指向的值,如下:

*p2=3; //正确

修改后:

const int *p1;  //指向整型常量的指针,其指向的整数不能改变
p1=&a;
*p1=5; //新增

其中,*p1=5 会报错,因为p1是指向整型常量的指针且其指向的值不能改变

     

再修改:

const int  *p1;  //指向整型常量的指针,其指向的整数不能改变
p1=&a;
//*p1=5; //会报错
a=5;//新增,通过

其中,*p1=5 会报错,而a=5便可以通过,因为p1指向的值不能改变,但可以直接改变变量a的值

综上比较:

    p1=&c;  //正确,p1可以改变指向的地址

    p2=&c;  //错误,p2不可改变指向的地址

    *p1=10; //错误,p1指向的值不可改变

    *p2=10; //正确,p2指向的值可改变

所以:

    const int  *p1 =&a;  //p1指向的值不能改变,但指向的地址可变

    int* const p2 =&b;   //p2指向的地址不能改变,但其指向的值可改变

-------------------------------------------          END       -------------------------------------

猜你喜欢

转载自blog.csdn.net/u012679707/article/details/80204980