15.1 const Pointers

I l @ ve RuBoard

Declaring constant pointers is a little tricky. For example, although the declaration:

 const int result = 5; 

tells C++ that result is a constant, so:

 result = 10;      // Illegal 

is illegal. The declaration:

 const char *answer_ptr = "Forty-Two"; 

does not tell C++ that the variable answer_ptr is a constant. Instead it tells C++ that the data pointed to by answer_ptr is a constant. The data cannot be changed, but the pointer can. Again we need to make sure we know the difference between "things" and "pointers to things."

What's answer_ptr ? A pointer. Can it be changed? Yes, it's just a pointer. What does it point to? A const char array. Can the data pointed to by answer_ptr be changed? No, it's constant.

Translating these rules into C++ syntax we get the following:

 answer_ptr = "Fifty-One";     // Legal (answer_ptr is a variable) *answer_ptr = 'X';            // Illegal (*answer_ptr is a constant) 

If you put the const after the * , you tell C++ that the pointer is constant. For example:

 char *const name_ptr = "Test"; 

What's name_ptr ? A constant pointer. Can it be changed? No. What does it point to? A character. Can the data we pointed to by name_ptr be changed? Yes.

 name_ptr = "New";           // Illegal (name_ptr is constant) *name_ptr = 'B';            // Legal (*name_ptr is a char) 

Finally, we put const in both places, creating a pointer that cannot be changed to a data item that cannot be changed:

 const char *const title_ptr = "Title"; 

One way of remembering whether the const modifies the pointer or the value is to remember that *const reads "constant pointer" in English.

I l @ ve RuBoard


Practical C++ Programming
Practical C Programming, 3rd Edition
ISBN: 1565923065
EAN: 2147483647
Year: 2003
Pages: 364

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net