c++ - const int*、const int * const 和 int const * 之间有什么区别?

标签 c++ c pointers constants c++-faq

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

我想知道在赋值、传递给函数等方面所有该做和不该做的事情。

最佳答案

向后阅读(由 Clockwise/Spiral Rule 驱动):

  • int* - 指向 int 的指针
  • int const * - 指向 const int 的指针
  • int * const - 指向 int 的 const 指针
  • int const * const - 指向 const int 的 const 指针

现在第一个 const 可以位于类型的任一侧,因此:

  • const int * == int const *
  • const int * const == int const * const

如果你想变得非常疯狂,你可以这样做:

  • int ** - 指向 int 的指针
  • int ** const - 指向 int 指针的 const 指针
  • int * const * - 指向 int 的 const 指针
  • int const ** - 指向 const int 的指针
  • int * const * const - 指向 int 的 const 指针的 const 指针
  • ...

并确保我们清楚 const 的含义:

int a = 5, b = 10, c = 15;

const int* foo;     // pointer to constant int.
foo = &a;           // assignment to where foo points to.

/* dummy statement*/
*foo = 6;           // the value of a can´t get changed through the pointer.

foo = &b;           // the pointer foo can be changed.



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

*bar = 16;            // the value of c can be changed through the pointer.    

/* dummy statement*/
bar = &a;             // not possible because bar is a constant pointer.           

foo 是一个指向常量整数的变量指针。这使您可以更改所指向的内容,但不能更改所指向的值。最常见的是 C 风格的字符串,其中有一个指向 const char 的指针。您可以更改指向的字符串,但无法更改这些字符串的内容。当字符串本身位于程序的数据段中且不应更改时,这一点很重要。

bar 是一个常量或固定指针,指向可以更改的值。这就像没有额外语法糖的引用。因此,通常您会在使用 T* const 指针的地方使用引用,除非您需要允许 NULL 指针。

关于c++ - const int*、const int * const 和 int const * 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26618490/

相关文章:

c++ - C++ 中的头文件和命名空间

c - 计算 c 中的标准差时得到 inf

c++ - 用一个程序创建多个链表

C - For循环做一个简单的操作,不增加计数器

字符指针和 printf 函数

c++ - 使用 strcmp() 比较两个 C 字符串数组

c++ - 如何在游戏中的不同时间高效渲染不同的东西?

c++ - 使用二维动态数组写一个类

c - 在 C 中使用 char 数组作为二维数组

c - 将链表分成两半