zoukankan      html  css  js  c++  java
  • const与指针、引用

    const与指针类型

    定义一个指针*p:

    const int* p = NULL;
    int const* p = NULL;
    
    int* const p = NULL;

    上面两行定义完全等价,第三行则不同。

    下面两行定义也完全等价:

    const int* const p = NULL;
    int const* const p = NULL;

    举例说明:

    int x = 3;
    const int* p = &x;
    //p=&y; 正确
    //*p=4; 错误

    const修饰的是*p,所以通过*p修改x的值是错误的。

    int x = 3;
    int* const p = NULL;
    //p=&y; 错误

    const修饰的是p,p只能指向一个地址,不能再改变。

    const int x = 3;
    const int* const p = &x;
    //p=&y; *p=4; 都是错误的

    上面这种情况,就不能再做任何修改。

    const与引用类型

    int x = 3;
    const int& y = x;
    //x=10; 正确
    //y=20; 错误

    y被const修饰,所以不能通过y去修改x的值。

    更多示例:

    const int x = 5;
    x = 5;    //错误
    
    int x = 3;
    const int y = x;
    y = 5;    //错误
    
    int x = 3;
    const int* y = &x;
    *y = 5;    //错误
    int x = 3, z = 4;
    int* const y = &x;
    y = &z;    //错误
    
    const int x = 3;
    const int& y = x;
    y = 5;    //错误
    const int x = 3;
    int* y = &x;    //错误
    
    int x = 3;
    const int* y = &x;    //正确

    上面这个示例,前者x是不可变的,而y是可变的,如果我们定义一个可变的指针指向一个不可变的变量,那么这就意味着存在风险,我们可以通过指针去修改x的值,这种情况编译器是不允许存在的,所以错误;对于后者,指针只有读权限,x则有读和写的权限,我们用一个权限小的对象接受一个权限大的对象这是允许的,而用一个权限大的对象接受一个权限小的对象则不允许。

  • 相关阅读:
    java之md5加密算法
    springboot之快速创建项目
    java之idea打jar包
    java只http改成https访问
    springboot之读取配置文件
    springboot之项目打包
    Git之fatal: remote origin already exists
    WebStorm ES6 语法支持设置和ES6语法的JS文件编译为ES5语法文件
    转 JavaScript里的数组转化新方法Array.From
    网页特殊符号HTML代码大全
  • 原文地址:https://www.cnblogs.com/zhuifeng17/p/12363202.html
Copyright © 2011-2022 走看看