zoukankan      html  css  js  c++  java
  • const 那点事儿

    修饰变量时 const char 与 char const 是等价的,例如
    1. const char a = 'a';
    2. char const a = 'a';
    表示变量a不能再被赋予其他值.

    到指针时情况有点复杂,有 const 限定指针本身和限定指针指向的内容的区别,同样首先要说明的是
    1. const char *p = "ABC";
    2. char const *p = "ABC";
    这两种写法完全一样,都表示指针 p 指向的内容不能通过指针 p 修改,指针本身是可以指向其他内存地址的,这样说不是很明白,因为"ABC"本身就是常量,不能被修改,还是代码解释吧
    1. char buf1[] = "ABC";
    2. char buf2[] = "DEF";
    3. const char *p = buf1;
    4. *p = 'B'; // 错误,在p看来,buf1的内容是不可改变的,想通过p来修改buf1的内容编译器将报错,事实上buf1的内容是否可变由buf1本身属性决定
    5. p = buf2; // 没问题,指针p本身并不是const
    与此对应还有另一种情况 
    1. char buf1[] = "ABC";
    2. char buf2[] = "DEF";
    3. char * const p = buf1;
    4. *p = 'D'; // 没问题, const 修饰 p 本身,表示p指向的内存地址不能改变,但是内存地址上的内容并没有被限定为const,内容是可以通过p改变的
    5. p = buf2; // 错误,p为常量,初始化后不能被赋予其他值
    一种比较变态的写法
    1. char buf[] = "ABC";
    2. const char * const p = buf; // 这么做以后既不能将p指向其他内存地址,也不能通过p修改buf的内容
    总结来就是 :
    const 在 * 左边时表示指针指向的内容不能通过指针修改,但是指针本身是可变的,它可以指向其他的内存地址(const 限定指向的内容);
    const 在 * 右边时表示指针本身是不可变的,它不能再指向其他的内存地址,但是可以通过指针修改它指向的内容(const 限定指针本身).




  • 相关阅读:
    软件测试总结
    接口测试总结与分享
    Android自动化测试框架
    Jmeter系列- Jmeter 分布式测试
    python+requests接口自动化测试实战
    测试十年的前辈工作心得与经验分享
    一次压测实战的复盘
    (纯技术干货)完整的框架搭建过程 实战 Python+unittest+requests 接口自动化测试
    Android自动化测试框架必用工具
    第八周作业
  • 原文地址:https://www.cnblogs.com/mforestlaw/p/5780940.html
Copyright © 2011-2022 走看看