 We already know about the constant specifier for defining constants. This specifier makes a promise that a variable's value won't change. When you say that n is a constant int, the compiler will tell you if you break that promise. When pointers enter the scene, there are two things that can change. You can change the value of the pointer to make it refer to another variable, or you can change the value of the variable that the pointer is pointing to, or you can change both. You can use the constant specifier to make promises not to change these things. Putting constant here says, I will not change the value in p. I will never point it to another location. But I can change what it points to. You read this declaration as p is a constant pointer to an integer. Putting constant here says, I can point p to a new place, but I won't use it to change the value that p refers to. Read this declaration as p is a pointer to a constant integer. You can even use constant in both places to make a promise that you will never change the pointer to refer to a new location, and you'll never use the pointer to change the value it points to. Read this declaration as p is a constant pointer to a constant integer. Use whichever of these combinations your program requires.