zoukankan      html  css  js  c++  java
  • c++(4)----指针和引用、const

      指针和引用都是一种复合类型

      复合类型: 基于其他类型定义的类型 

           基本数据类型+声明符

    引用并非对象,而是一个别名,定义时必须初始化
    // 引用并非对象,而是一个别名
    int ival =1024;
    int &refVal  = ival;     //  refVal 指向ival(是ival的另一个名称)
    int &refVal2;            //报错:引用必须被初始化
    
    
    int i =1024, i2=2048;
    int &r=i, r2=i2;   //r是一个引用;r2 是 int
    int &r3 = i3, &r4 =i2;  // r3和r4都是引用

    指针:  本身就是一个对象,允许指针的赋值和拷贝。

        定义时无须初始化

    double  dp  ,*dp2;     //dp2是指向double型对象的指针,dp是double型对象。
    
    int ival = 42;
    int *p  = &ival;      //p存放变凉ival的地址。

    指向指针的引用

    引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,因此存在对指针的引用。

    int i =42;
    int *p;
    int *&r = p;  // r是指针p的引用(r是p的别名)
    
    r  = &i;   // 此时,p也指向i
    *r =0;    // 此时 i为0

    const

    // 1、
    const int buf=512;
    buf =512;    // const 对象不能被写值
    
    const int i = get_size() ;       //正确:运行时初始化
    const int j = 42;                  //正确: 编译时初始化
    const int k;                         //错误:  k是一个未经初始化的常量
    
    // 初始化
    int  i =42;
    const int ci = i;      //正确:  i的值被拷贝给了ci
    int  j  = ci;            //正确: ci的值被拷贝给了j
    
    // 默认状态下,c onst对象仅在文件内有效
    //  file_1.cc 定义并初始化了一个常量, 该常量能被其他文件访问
    extern const int bufsize = fcn();
    // file_1.h 头文件
    extern const int bufSize;  // 与file_1.cc中定义的bufsize 是同一个
    const int ci = 1024;
    const int &rl = ci; //正确: 引用及其对应的对象都是常量
    r1 = 42;   // 错误: r1是对常量的引用
    int &r2 = ci;   // 错误: 试图让一个非常量引用指向一个常量对象。

    const int * 和 int * const

    //const int *p和int const *p是相同的 
    const int *p;  //p所指向的变量值不能被修改。(*p)是const
    
    int *const p;  //表示一旦得到了某个变量的地址,不能再指向其他变量
  • 相关阅读:
    Python NameError: name 'include' is not defined [closed]
    Python3 venv 创建虚拟环境
    python编程:从入门到实践读书笔记(一)
    kafka(2.2.1)(kerberos+LDAP+Sentry)访问使用
    实现Base64解码和命令分发器
    装饰器器应用及用途
    __slots__和运算符重载中的反向方法
    python插件化开发
    python分发包管理
    SocketServer模块
  • 原文地址:https://www.cnblogs.com/feihu-h/p/12238679.html
Copyright © 2011-2022 走看看