Рассмотрим:
void foo1(char **p) { *p++; }
void foo2(char **p) { *p += 1; }
и
char *s = "abcd";
char *a = s; 
foo1(&a); 
printf("%s", a); //abcd
 но если я использую foo2() вместо:
char *a = s; 
foo2(&a); 
printf("%s", a); //bcd
Может кто-нибудь объяснить это?