指针、引用和常量修饰符const

C++中的指针、引用与常量修饰符const

一、C++中的指针

  指针:一种存储数据内存地址的数据类型。因为其表示的是地址信息,所以不论何种数据类型,其指针都占用相同的存储空间。


二、C++中的引用

  引用:已存在对象的别名,不属于数据类型,不占用存储空间。通过引用对对象的操作类似与指针,会真正改变对象。引用必须进行初始化,且不能再次引用其他对象。
注意:
  1.在声明引用时,必须对其进行初始化(引用用作函数参数、函数返回值除外);
  2.指针通过地址间接访问某变量,引用通过别名直接访问;
  3.引用的初始值可以是一个变量,也可以是一个引用;
  4.引用初始化后不能用来声明为另一个变量的引用;
  5.不允许建立void类型的引用,void只在语法上相当于一个类型,其实质为无类型或空类型;
  6.不能建立引用数组;
  7.不能建立引用的引用,不能建立引用的指针,引用本身不是一种数据类型;
  8.可以将引用的地址传给指针,此时,指针指向原来的变量;
将引用作为函数参数:1.效果与指针相同;2.函数调用不会产生实参副本;3.访问叫指针便捷。
使用常引用的场合:既要节省程序空间,又要保护数据不被改变。
将引用作为函数返回值:1.不可返回局部变量的引用;2.不能返回函数体中动态分配空间的引用;3.尽量返回类成员的const引用;4.流操作符重载声明为引用。


三、C++中的常量修饰符

  常量修饰符:const。表示该对象为常量,不可修改。
  常量的分类:顶层层常量&底层常量:
    顶层常量(top-level const):表示所修饰的变量名引用的对象为常量,其值不可修改–>const typename variable_name;
    底层常量(low-level const):表示所修饰的变量名为常量,不可修改,即不可引用其他对象–> const variable_name.
Note:
  类型:
    基本类型:算数类型与空类型(int)。
    复合类型:基于其他类型定义的类型(int*,int &,int *&…)。

#include<iostream>

typedef struct data{
    data()
    {
        num = 0;
        cha = 'a';
    }
    int num;
    char cha;
} Node;



int main()
{
    Node node;
    node.cha = 'a';
    node.num = 10;
    //const Node c_n_node = node;   
    //c_n_node.cha = 'b';   -->error: assignment of member ‘data::cha’ in read-only object
    //c_n_node.num = 20;  -->error: assignment of member ‘data::num’ in read-only object
    Node const n_c_node = node;
    node.cha = 'b';
    node.num = 20;

    //Node t_node;
    //n_c_node = t_node;   -->error: passing ‘const Node {aka const data}’ as ‘this’ argument of ‘data& data::operator=(const data&)’ discards qualifiers [-fpermissive]

    //Node const *n_c_p = &node;
    //n_c_p->num = 20; -->error: assignment of member ‘data::num’ in read-only object

    Node * const n_p_c = &node;
    //Node t_node;
    //n_p_c = &t_node; -->error: assignment of read-only variable ‘n_p_c’

    n_p_c->num = 20;

    Node const *n_c_p = &node;
    //n_c_p->num = 10;  -->error: assignment of member ‘data::num’ in read-only object
    
    Node t_node;
    n_c_p = &t_node;

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值