C知识记录-关于const

关于const

  1. const的值在初始化后,是不能随意改变的,不然会引发编译器报错

  2. const对象必须初始化

  3. 使用一个普通变量区初始化const变量,这种操作是可以的

    int i = 42;
    const int ci = i;
    int j = ci;
    
  4. 常量的特征仅仅在执行改变常量的操作时才会发挥作用

  5. 默认情况下,const仅在定义的文件内有效,如果你想多个文件使用同一个const,就用extern关键字

    extern const int bufSize = fcn(); //在file.c定义并初始化的常量
    extern const int bufSize; //file.h中这么写,其实这个和file.c中定义的是同一个buffSize
    
  6. 引用和被绑定对象类型不同时,编译器会创建一个临时变量,来作为中间值

    /*这样写的话,编译器会产生一个临时变量*/
    double dval = 3.14;
    const int &ri = dval;
    
    /*会演变为*/
    double dval = 3.14;
    const int temp = dval;
    const int &ri = temp;
    /*正常来说,引用和被绑定的对象,地址应该是一样的,但是这里,就会导致ri和temp的地址打印出来时不一样的*/
    
  7. 常量引用,对于引用的对象本身是不是一个常量未做限定

  8. 指向常量的指针也没有规定其所指的对象必须是一个常量

  9. ⭐️不允许通过常量引用、指向常量的指针改变引用对象的值

  10. ⭐️常量指针指向常量的指针

    • 常量指针:它里面里面存放的地址是不能变的,但是那个地址指向的值可以变(地址固定,值可变

    • 指向常量的指针:

      • 不能改变这个指针所指对象的值,但是这个指针是可以改的。(值固定(就是不能通过这个指针改变指向对象的值,而这个对象只要类型符合,是可以换的),地址可变

      • 指向常量的指针,允许指向一个非常量对象

      • 	const double pi = 3.14;
        
            // double * ptr = π
        
            const double *cptr = π
        
            cout << "pi 地址 = " << &pi << endl;
        
            cout << "cptr 地址 = " << &cptr << endl;
        
            cout << "cptr 值 = " << cptr << endl;
        
            cout << "cptr 所存地址里的值 = " << *cptr << endl;
        
            cout << '\n' << endl;
            // *cptr = 42;
        
            double dval = 5.96;
        
            cptr = &dval;
        
            cout << "dval 地址 = " << &dval << endl;
        
            cout << "cptr 地址 = " << &cptr << endl;
        
            cout << "cptr 值 = " << cptr << endl;
        
            cout << "cptr 所存地址里的值 = " << *cptr << endl;
        
        	/*对应的输出为*/
        	pi 地址 = 0x61ff08
        	cptr 地址 = 0x61ff04
        	cptr 值 = 0x61ff08
        	cptr 所存地址里的值 = 3.14
        
        	dval 地址 = 0x61fef8
        	cptr 地址 = 0x61ff04
        	cptr 值 = 0x61fef8
        	cptr 所存地址里的值 = 5.96
        
  11. 顶层const和底层const

    • 顶层const:指针本身是const(常量指针)
    • 底层const:指针所指的对象是常量(指向常量的指针)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值