您的位置:首页 > 其它

区分const指针

2015-07-05 23:37 183 查看
Read it backwards...

int*
- pointer to int

int const *
- pointer to const int

int * const
- const pointer to int

int 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 int

int ** const
- a const pointer to a pointer to an int

int * const *
- a pointer to a const pointer to an int

int const **
- a pointer to a pointer to a const int

int * 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 int. This lets you change what you point to but not the value that you point to. Most often this is seen with cstrings 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 const 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.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: