const int *p说明不能修改_C++ const详解

拼搏现实的明天。 2023-01-10 10:14 316阅读 0赞

  常量在C++中经常用到,用关键字const表示,它是常数变量,也就是说,它仍然是变量,而不是常数。什么区别呢?编译器会为变量在内存中分配地址空间,而常数是编译器在编译过程中记录在内存表里一个实体。

  • 常量定义

    const int a = 10;

在定义完之后,就不能再修改常量a的值了。如果是在不同的文件中使用,需要用到关键字extern

  1. extern const int a ;

这样表示变量a是一个定义别处的全局变量,在这里只能使用,并不能修改,但a并不一定真的是一个const

指针常量常量指针
  这应该是C++面试和笔试中经常考到的一个知识点。

  • 指针常量

    int const q = 10; // q is const q = 20; // OK
    q++; // ERROR

指针常量,在上面的代码中,q是常量,指向的地址是不能变化的,但指向地址中的内容是可以改变的。

  • 常量指针

    int a = 10;
    int b = 20;
    const int p = &a; // p is const
    *p = 15; // ERROR
    a = 30; // OK
    p = &b; // OK

常量指针,在上面的例子中,(p)是常量,我们不能通过(p)来改变指向的对象即a;但a本身是可以改变的,而且p也是可以指向别处的。

有什么好办法容易区分这两个呢?可以看const*的先后顺序:

  1. const int *p; //常量指针
  2. int *const p; // 指针常量

而且只要我们记住,const后面的是常量,这样就很容易区分它们的功能,对于常量指针*p都在const后面,所以*p是个常量,直接对*p赋值的操作肯定是错误的;而指针常量,只有pconst后面,所以p是常量,指针指向地址是不能变的,但指向地址里面的内容是可以变的。

函数参数中的常量
如果函数的参数中有常量,那么在函数中,该参数是不能被修改的

  1. int func(const int i){
  2. i++; // ERROR
  3. }

函数返回值为常量

  1. int f1() {
  2. return 1;}
  3. const int f2() {
  4. return 1;}
  5. int main(){
  6. const int k = f1(); // OK
  7. int n = f2(); // OK
  8. }

所以,对于const变量,我们可以要记住一个核心的一点是,const后面的变量是不能当左值的。

往期文章:

FPGA相关:

  • Vivado中jobs和threads的区别?选择多个jobs能加快实现速度么?
  • SystemVerilog教程之数据类型1
  • Vivado中模块封装成edif和dcp
  • FPGA 中的有符号数乘法
  • 为什么推荐使用XPM?
    • RAM IP Core中 Write First Read First和No Change的区别*
    • *Vivado调试小结:ILA debug中的数据也许并不可信
  • FPGA复位的正确打开方式
  • 如何使用Git进行Vivado工程的管理
  • 大家一致避免使用的锁存器为什么依然存在于FPGA中?我们对锁存器有什么误解?
  • 影响FPGA时序的进位链(Carry Chain), 你用对了么??
  • Virtex7 Microblaze下DDR3测试
  • Matlab高效编程技巧
  • 生成Verilog HDL例化模板
  • DCM/DLL/PLL/MMCM区别

其他:

  • C++ vector用法详解
  • C++ 内联函数 inline的详细分析
  • 自动驾驶入门之视觉定位坐标转换
  • 什么是噪声温度?-174dBm/Hz又是什么?

FPGA时序约束教程:

  1. FPGA时序约束理论篇之建立保持时间
  2. FPGA时序约束理论篇之时序路径与时序模型

    1. FPGA时序约束理论篇之IO约束

    2. FPGA时序约束理论篇之时钟周期约束

    3. FPGA时序约束理论篇之两种时序例外

    4. FPGA时序约束理论篇之xdc约束优先级

    5. FPGA时序约束实战篇之梳理时钟树

    6. FPGA时序约束实战篇之主时钟约束

    7. FPGA时序约束实战篇之衍生时钟约束

    8. FPGA时序约束实战篇之延迟约束

    9. FPGA时序约束实战篇之伪路径约束

    10. FPGA时序约束实战篇之多周期路径约束

    11. Vivado时序约束辅助工具

    12. FPGA时序约束之Tcl命令的对象及属性

欢迎关注微信公众号:

4ea9d5900df1a6fd502bb2c075978a80.png

加FPGA技术交流群的朋友,请加微信:xhclsys2

发表评论

表情:
评论列表 (有 0 条评论,316人围观)

还没有评论,来说两句吧...

相关阅读