我总是搞乱如何正确使用 const int*
、const int * const
和 int 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/