In dem Code wird kein Literal geändert. Dein Zeiger ist wie ein Stück Papier, auf dem du mit Bleistift eine Adresse notierst.
Wie gesagt, mit Bleistift. Du kannst das jederzeit ausradieren und eine andere Anschrift aufschreiben. Das heißt aber nicht, dass du damit irgendwie das Haus beeinflussen kannst, das an der Adresse steht.
Wird irgendein Haus abgerissen, oder zieht jemand um, nur weil du auf deinem Zettel eine andere Adresse aufschreibst?
Ob du einen Zeiger an eine andere Stelle zeigen lässt, hat auf den allozierten Speicher überhaupt keinen Einfluss.
Es ist da wie mit allen Zeigern. Der Zeiger wird kopiert, nicht das, worauf er zeigt.
Ich glaube, es ist das erste mal, dass du überhaupt mit Zeigern arbeitest. Vielleicht solltest du nicht gerade mit char-Zeigern anfangen, weil die nunmal eine Sonderbehandlung bekommen.
Nein. Malloc verwendest du, wenn du eine Lebensdauer über den Scope hinweg haben willst oder die Größe eines Arrays erst zur Laufzeit kennst.
Ich glaube, dir ist nicht ganz klar, was Literal bedeutet. Ein Literal ist eine Konstante in deinem Quellcode. Es gibt in C Ganzzahl-, Fließkomma-, Zeichen- und Zeichenkettenliterale. Zeichenkettenliterale sind die einzigen, von denen du überhaupt eine Adresse bekommen kannst. Du kannst aber den Inhalt nicht über diese Adresse ändern, ohne undefiniertes Verhalten zu erzeugen.
In Ergänzung zu carstenjs Antwort: In deinem Programm gibst du die Adresse der Zeigervariablen aus, nicht die Adresse, auf die der Zeiger zeigt.