right. The C++ convention is instead to associate the * with the type, as in int* ptr, and read the const as modifying the type to the left. int const * ptrToConst can thus be read as "*ptrToConst is a int const" (the value is constant), or "ptrToConst is a int const *" (the pointer is a pointer to a constant integer). Thus: int *ptr; // *ptr is an int value int const *ptrToConst; // *ptrToConst is a constant (int: integer value) int * const constPtr; // constPtr is a constant (int *: integer pointer) int const * const constPtrToConst; // constPtrToConst is a constant pointer and points // to a constant value C++ convention Following C++ convention of analyzing the type, not the value, a rule of thumb is to read the declaration from right to left. Thus, everything to the left of the star can be identified as the pointed type and everything to the right of the star are the pointer properties. For instance, in our example above, int const * can be read as a writable pointer that refers to a non-writable integer, and int * const can be read as a non-writable pointer that refers to a writable integer. A more generic rule that helps you understand complex declarations and definitions works like this: find the identifier whose declaration you want to understand read as far as possible to the right (i.e., until the end of the declaration or to the next closing parenthesis, whichever comes first) back up to where you began, and read backwards to the left (i.e., until the beginning of the declaration or to the open-parenthesis matching the closing parenthesis found in the previous step) when you've reached the beginning of the declaration you're done. If not, continue at step 2, beyond the closing parenthesis that was matched last. Here is an example: When reading to the left, it is important that you read the elements from right to left. So an int const * becomes a pointer to a const int and not a const pointer to an int. In some cases C/C++ allows the const keyword to be placed to the left of the type. Here are some examples: const int *ptrToConst; //identical to: int const *ptrToConst, const int *const constPtrToConst; //identical to: int const *const constPtrToConst Although C/C++ allows such definitions (which closely match the English language when