我总是搞砸如何正确使用const int*,const int * const和int const *。是否有一套规则来定义你能做什么和不能做什么?
const int*
const int * const
int const *
我想知道在分配、传递给函数等方面的所有注意事项。
向后阅读(由Clockwise/Spiral Rule驱动):
int*
int * const
int const * const
现在第一个const可以在类型的任一侧,所以:
const
const int *
如果您想真正发疯,可以执行以下操作:
int **
int ** const
int * const *
int 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. 您可以更改指向的字符串,但不能更改这些字符串的内容。当字符串本身位于程序的数据段中并且不应更改时,这一点很重要。
foo
const char
bar是指向可以更改的值的常量或固定指针。这就像一个没有额外语法糖的参考。由于这个事实,通常您会在使用T* const指针的地方使用引用,除非您需要允许NULL指针。
bar
T* const
NULL