J'ai trouvé la solution !
En fait, j'ai mal regarder, la valeur du pointeur est bien passer.
Or un passage par pointeur permet de modifier la valeur pointé, par contre dans f(char* g) g est bien une nouvelle variable prenant comme valeur la valeur du pointeur (l'adresse) par contre si dans la fonction on modifie ce 'g', l'effet ne ce fait pas sentir sur la variable passer en argument. En revanche modifié *g modifiera la valeur pointer par la variable passé à la fonction.
Et en fait, quand on fait char * f="essai", f pointe vers un "const char", il est alors impossible de modifié '*f' (en tout cas c'est la conclusion que je tire de l'erreur de segmentation lorsque je fait f[0]='f').
Au final, comme préconiser par tout le monde, il faut bien faire :
char*ch; strcpy(ch,"essai"); (et oui, on me l'avai bien dit)
en esperant avoir été à peu près clair


