The key is to read them from right to left.
For the key word, const, please refer to this note.
Thus,
int * is a regular pointer to a regular integer;
const int * ptr is a regular pointer, *ptr, pointing to a constant integer;
int *const ptr is a constant pointer, *ptr, pointing to a regular integer;
const int const *ptr is a constant pointer, *ptr, pointing to a constant integer;
int const *ptr == const int *ptr, since here int and const can be exchanged.
Let us look at some examples:
const int val = 5;
const int *ptr = &val;
*ptr = 10; // is wrong, since the object pointed is a constant integer
ptr++; //is ok, since the pointer is a regular pointer,
//now ptr points to a different address, but it still
//cannot change the value of the object it is pointing to;
const int val = 5;
int * const ptr = &val;
*ptr = 10; // is ok, since the object pointed is a regular integer
ptr++; //is wrong, since the pointer is a constant pointer,
//and can only point to fixed address.
const int val = 5;
const int * const ptr = &val;
*ptr = 10; // is wrong, since the object pointed is a constant integer
ptr++; //is wrong, since the pointer is a constant pointer
No comments:
Post a Comment