zoukankan      html  css  js  c++  java
  • 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;更接近实际。

  • 相关阅读:
    poj 3624 (背包入门)
    poj 2175(最消费用最大流消圈法判断是否为最小费用)
    poj 2195 (最小费用最大流)
    poj 3659 (树上的最小支配集)
    Codeforces Beta Round #76 (Div. 1 Only)
    poj 2516(最小费用最大流)
    2013 腾讯马拉松初赛 第0场
    批量重命名,把文件名中的(1)去掉。
    ms sql server 添加列,删除列。
    winform 获取当前程序所在目录。
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3190339.html
Copyright © 2011-2022 走看看