const int *,const int * const和int const *之间有什么区别?

我总是搞砸了如何正确使用const int*const int * constint const * 。 是否有一套规则来定义你可以做什么和不可以做什么?

我想知道所有的做法和所有的要点,包括任务,传递给功能等。


向后读取(由顺时针/螺旋规则驱动):

  • int* - 指向int的指针
  • int const * - 指向const int的指针
  • int * const - const指向int的指针
  • int const * const - const int指针
  • 现在第一个const可以在类型的任一侧,如下所示:

  • const int * == int const *
  • const int * const == int const * const
  • 如果你想变得非常疯狂,你可以做这样的事情:

  • int ** - 指向int **指针的指针
  • int ** const - 一个指向int的指针的const指针
  • int * const * - 指向指向int的常量指针的指针
  • int const ** - 指向const int指针的指针
  • int * const * const - 一个指向int * const * const的常量指针的const指针
  • ...
  • 并确保我们清楚const的含义

    const int* foo;
    int *const bar; //note, you actually need to set the pointer 
                    //here because you can't change it later ;)
    

    foo是一个指向常量整数的变量指针。 这可以让你改变你指向的内容,但不是你指向的值。 大多数情况下,您可以看到C风格的字符串,其中有一个指向const char的指针。 您可以更改指向哪个字符串,但不能更改这些字符串的内容。 当字符串本身位于程序的数据段中时,这一点很重要,不应该改变。

    bar是一个常数或固定指针,可指向可更改的值。 这就像没有额外语法糖的参考。 由于这个事实,除非需要允许NULL指针,否则通常会使用T* const指针的引用。


    对于不了解顺时针/螺旋线规则的人:从变量名称开始,按顺时针方向移动(在这种情况下,向后移动)到下一个指针类型 。 重复,直到表达结束。

    这里是一个演示:

    const指针指向int const

    指向int const的指针

    指向const int的指针

    const指针指向int


    我想所有的东西都已经在这里回答了,但我只想补充一点,你应该小心typedef s! 它们不只是文本替换。

    例如:

    typedef char *ASTRING;
    const ASTRING astring;
    

    astring的类型是char * const ,而不是const char * 。 这是我总是倾向于将const放在该类型右侧的原因之一,并且从不在开始。

    链接地址: http://www.djcxy.com/p/3617.html

    上一篇: What is the difference between const int*, const int * const, and int const *?

    下一篇: What is the difference between Public, Private, Protected, and Nothing?