ポインター、ポインター、あるとダメ、ないとダメ
ポインターは、メモリ内のどこに sth が格納されているかを格納する数値です。
char* aux = (char*) malloc (strlen (vigia1)+1);
よし、 heapと呼ばれるメモリの一部に領域を作成し、新しく作成されたメモリ領域のアドレスを aux に保存しました。
aux=vigia1;
これで、「作成」したメモリ空間のアドレスが vigia1 に保存されている番号で上書きされました。これはたまたま別のメモリ空間へのアドレスです。
vigia1=vigia2;
ここで、vigia1 に vigia2 の値を代入しています。これは、そこにあるメモリ空間の別のアドレスです。
vigia2=aux;
そして最後に、vigia1 が以前に指していたメモリ領域を vigia2 が指すようにします。
free (aux);
ここで、aux が指すメモリを解放しています。ちょっと待ってください。この行の上の行で、vigia2 が同じアドレスを指すようにしました。何も役に立たないのも不思議ではありません:)
あなたがやりたいことを手伝おうとしています:
リスト ノードをメモリ内で順序付けする必要があるという制約がない限り、ノードの内容をコピーする必要はありません。最初のノードのポインタを 2 番目のノードのメモリ領域を指すようにするだけです。ノード。
完全なスワップは次のようになります。
char *aux; // you'll need an aux to make the swap, the normal stuff
aux = vigia1; // now aux points to the same address as vigia1
vigia1 = vigia2; // vigia1 now points to the contents of vigia2
vigia2 = aux; // and now vigia2 points to the content pointed previously by vigia1
/* and tada! the swap is done :D */