Intro
What is the difference between const int*, const int * const, and int const *?
Summary
Read it backwards (as driven by Clockwise/Spiral Rule):
int*
– pointer to intint const *
– pointer to const intint * const
– const pointer to intint const * const
– const pointer to const int
Now the first const
can be on either side of the type so:
const int *
==int const *
const int * const
==int const * const
If you want to go really crazy you can do things like this:
int **
– pointer to pointer to intint ** const
– a const pointer to a pointer to an intint * const *
– a pointer to a const pointer to an intint const **
– a pointer to a pointer to a const intint * const * const
– a const pointer to a const pointer to an int- …
And to make sure we are clear on the meaning of const
const int* foo;
int *const bar; //note, you actually need to set the pointer
//here because you can't change it later ;)
foo
is a variable pointer to a constant integer. This lets you change what you point to but not the value that you point to. Most often this is seen with C-style strings where you have a pointer to a const char
. You may change which string you point to but you can’t change the content of these strings. This is important when the string itself is in the data segment of a program and shouldn’t be changed.
bar
is a constant or fixed pointer to a value that can be changed. This is like a reference without the extra syntactic sugar. Because of this fact, usually you would use a reference where you would use a T* const
pointer unless you need to allow NULL
pointers.
References
- https://stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const
- http://c-faq.com/decl/spiral.anderson.html
本作品使用基于以下许可授权:Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
请问下ssr,st怎么无法访问了???
阁下所提网站与我没有任何关系