Originariamente inviato da Lasentinella
*a dovrebbe indicare il contenuto del puntatore (il valore a cui punta), ma
papp=*a; non dovrebbe voler dire fai puntare papp al contenuto di a? Non si dovrebbe fare o papp=a; oppure *papp=*a ?
Forse un disegnino puo spiegare la situazione

dop.punt punt. a char stringa di char
(a)1 --> 3 --> ziao

(b)2 --> 4 --> ciao

come vedi facendo

papp=*a;
*a=*b; // scambio
*b=papp;

metti nel puntatore di appoggia papp quello a cui punta a (il valore 3). Poi scambi i valori a cui puntano a e b. Alla fine riponi nella casella a cui punta b il valore di a.

Dopo queste operazioni avrai la seguente situazione

dop.punt punt. a char stringa di char
(a)1 --> 4 --> ciao

(b)2 --> 3 --> ziao

ovvero ora facendo *a punterai alla casella di memoria 4 che puntava a ciao.

Spero sia chiaro, non sono proprio Giotto io!