美文网首页
C++ const限定符与指针

C++ const限定符与指针

作者: 无聊的CairBin | 来源:发表于2020-08-28 00:14 被阅读0次

指向常量的指针

指向常量的指针不能用于其所指对象的值。若想存放常量对象的地址,只能使用指向常量的指针。

const int a =  3;   //a是个常量,其值不能改变
int *b = &a;        //错误:b是个普通指针
const int *c = &a;  //正确
*c = 8; //错误:c不能给a赋值

允许一个指向常量的指针指向一个非常量,但不能通过该指针修改这个非常量的值(但该非常量可以通过其他途径修改)。

int d = 0;  //一个整型变量
c = &d;     //正确,但不能通过指针c修改d的值

const指针

常量指针必须初始化,而且一旦初始化完成其值(也就是放在指针的那个地址)就不能改变了。把*放在const前说明不变的是指针的值而不是所指的那个值。

int a = 0;
int b = 1;
const int *c = &a;
int *const d = &a;


c = &b; //正确:但不能通过c改变b的值
*d = 5; //正确:可以通过d改变a的值
d = &b; //错误:d是一个常量指针,其本身的值不能改变

顶层const与底层const

基本概念

指针本身是不是常量指针所指对象是不是常量是两个相互独立的问题。
用名词 顶层 const 表示本身是个常量。
用名词 底层 const 表示所指对象是个常量。

  • 一般的,顶层const可以表示任意的对象。底层cosnt则与指针和引用等复合类型的基本类型有关。
  • 特殊的,指针可以同时是顶层const底层const;声明引用的const都是底层cosnt
int a = 0;
int *const p1 = &i; //顶层const
const int b = 42;   //顶层const
const int *p2 = &b; //底层const

拷贝操作

  • 顶层const在进行拷贝操作时不受什么影响

    const int a = 0;
    int b = a; //正确:二者类型相同且顶层const不受影响
    
  • 底层const的限制不能忽视!拷入和烤出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换。一般来说非常量能转换成常量,反之则不行。

    const int a = 0;
    const int *const p = &a;  //具有顶层和底层const的指针p,靠右边的是顶层,靠左边的是底层
    const int &b = a; //声明引用的const都是底层const
    int b = a;    //正确:a包含顶层const,无影响
    
    
    int *p1 = p;  //错误:p包含底层const,p1没有
    const int *p2 = p;    //正确:二者都包含底层const,p的顶层const无影响
    
    int i = 1;
    p2 = &i;  //正确:int*能转换成const int*
    

相关文章

  • C++ const限定符与指针

    指向常量的指针 指向常量的指针不能用于其所指对象的值。若想存放常量对象的地址,只能使用指向常量的指针。 允许一个指...

  • const 限定符详解

    背景 const 限定符的使用经常出现混淆,所以在此总结。 const 限定符与初始化 const 对象const...

  • 计算机基础的考察

    语言语法(以C/C++为例)。 指针(数组),函数指针,操作符运算顺序,const(常指针与指向常量指针),sta...

  • 常应用问题

    C++ const 常指针:const int* ptr;const 修饰int*,ptr指向整形常量,ptr指向...

  • C++笔记(2)

    这次学习的是const,C++是一种很坑爹的东西,连const都能玩出这么多的花样。 const 限定符 cons...

  • C++ const总结

    const限定符在C++中非常常见,有以下几种用途 const修饰一般变量 const修饰的变量必须初始化,原因是...

  • C++ | 随处可见的const限定符

    1.作用于变量 防止变量被修改。 2.作用于指针 常量指针特点:调用时const限定符在“*”前面,这种情况指针不...

  • C++ supplement 指针进阶及const限定符

    在上一节中说到了基本的指针的定义与解析,下面便是升级版,多级指针的理解: 所谓多级指针在于有多重的指针导向,因为指...

  • C++中的const和指针

    C++中的const可以与指针一起使用,通常可以归纳为3种:指向常量的指针,常指针,指向常量的常指针。 (1)指向...

  • const理解

    关于const *和* const的理解,可以参考[C C++ OC指针常量和常量指针区别]这篇文章。 该篇文章中...

网友评论

      本文标题:C++ const限定符与指针

      本文链接:https://www.haomeiwen.com/subject/nvlksktx.html