There are two type of const:
1. const int ?*p; ?<----- pointer 'p' is not const, while to what it points is const.
e.g.:
int i;
const int ci = 5;
const int *p;
p = &i;
p = &ci;
*p = 10; // error here
?
2. int *const cp; <----- the pointer 'cp' is const, you can't reassign value to 'cp' twice.
e.g.:
int i;
int j;
int *const cp = &i;
*cp = 3;
*cp = 4;
cp = &j; // error here
?
together:
const.c
??1 #include<stdio.h>
??2 #include<stdlib.h>
??3 void main()
??4 {
??5 ? ? ? ? int i = 5;
??6 ? ? ? ? int j = 7;
??7 ? ? ? ? const int ci = 4;
??8 ? ? ? ? const int *p;
??9 ? ? ? ? int *const cp = &j;
?10 ? ? ? ??const int *const cp1 = &ci;?// both pointer and what it points to are const.
?11 ? ? ? ? p = &ci;
?12 ? ? ? ? p = &i;
?13 ? ? ? ? printf("*p=%d\n", *p);
?14 ? ? ? ? printf("*cp=%d\n", *cp);
?15 ? ? ? ? printf("*cp1=%d\n", *cp1);
?16 ? ? ? ? const int **pp;
?17 ? ? ? ? pp = &p;
?18 ? ? ? ? printf("**pp=%d\n", **pp);
?19 ? ? ? ? const int *const *const cpp = &cp1;
?20 ? ? ? ? printf("**cpp=%d\n", **cpp);
?21 ? ? ? ? exit(EXIT_SUCCESS);
?22 }