• Thinking in C++: 静态指针与指向静态类型的指针


    当将const与指针一起使用的时候,一般有两种情况,const被应用到指针指向的那个东西,或者const被应用到存储在指针中的内存地址。

    第一种情况:pointer to const

    注意:const修饰符绑定到离他最近的那个东西上。

    const int* u; //u是一个指针,指向一个const int。即 为 (const int) (*u);

    也就是说u不是静态的,所以它不需要初始化。

    但需要注意:

    int const* v;//这个表达方式实际上与上面的那个表达式是一个意思!即 (int const) *v;

    上面的两种情况会造成理解上的混乱,所以在实际的工作过程中应该坚持只使用第一种写法。

    第二种情况:const pointer

    要使指针本身变成const,你必须将const修饰符放在*的右边,如下所示:

    int d =1;

    int* const w = &d;

    w是一个指针,它是const的,指向一个int类型。

    但现在d是可变的:

    d=2;

    *w=3;

    如果你不想指向的内容变化,可以:

    int d =1;

    const int* const x = &d;

    int const* const x2=&d;

    现在指针和指向的对象都不能变了,但请注意,只是*x与*x2不能赋值了,d还是可以赋值的。

    下面是一个练习:

    const int* u;

    int const* v;

    int d = 1;

    int* const w = &d;

    const int* const x = &d;

    int const* const x2 = &d;

    int main(){}

    你能将一个non-const的对象的地址赋给一个const的指针,但你不能将一个const的对象的地址赋给一个non-const的指针!

    另外需要注意一点:*其实是与标示符结合的,虽然我们写成int* a;实际上写成int *a;更接近实际。

  • 相关阅读:
    Linux 提权-依赖 Exp 篇
    s-cms学校建站重装漏洞
    极致CMS建站系统后台GETSHELL
    泛微weaver_oa filebrowser.jsp 任意目录遍历
    泛微oa系统com.eweaver.base.DataAction文件sql参数sql注入
    Supervisord rce(CVE-2017-11610)
    docker安装
    互联网测试开发面试题集锦【转】
    测试面试常见面试题汇总一
    Python操作MongoDB文档数据库
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3190339.html
Copyright © 2020-2023  润新知