Can you expalin the difference between the following statements in some examples and when do we need them:
const char *ptr; //
char *const ptr; //
The following statement:
defines a pointer to a const char array. This means that the pointer itself can change its value (e.g., you can do something like ptr++ or ptr--, as well as assign a new value to ptr). However, you cannot change the characters in the array to which ptr points. Thus ptr = 'a' is illegal.
On the other hand,
const char *ptr;
declares a const pinter to a non const char array. You can change the characters in the array through the const pointer: ptr = 'a';//OK
but you cannot change the pointer itself: ptr++, ptr-- and assigning a new value to ptr are all illegal.
char *const ptr;
You need the first form to disable undesirbale changes to the string, such as when you pass it to another function that is not allowed to modify it.
The second form is rarer. It is used when the pointer is mapped to a hardware port, for example.