Zeiger und Zuweisung, wie funktioniert das mit verschiedenen Typen?

Ich mache "Learn C the hard way" für das Selbststudium, wenn ich ein bisschen Python kenne. Ich habe mehrere Tutorials gelesen, kann mich jedoch nicht mit der Funktionsweise von Zeigern und Aufgaben befassen. Ich verstehe, dass Sie, wenn Sie den Zeiger dereferenzieren, ihm direkt einen Wert geben können, wie in:

int *anint = 42;

Wie sieht es aber mit der spezifischen Referenzierung des Speicherorts einer bereits erstellten Variablen aus? Konkret habe ich versucht:

char *pointer_to_strlit;
char *strlit = "some stuff";
pointer_to_strlit = &strlit;

Warum verursacht das Folgende einen Segfault, nachdem ich dies getan habe:

printf("I print strlit: %s\nI print it again by pointing to it: %s\nI print where the pointer is pointing: %p\n", strlit, *pointer_to_strlit, pointer_to_strlit);

Die Typen in C scheinen wirklich schwer zu sagen, wie sie sich verhalten und wie Zeiger verwendet werden, um auf die spezifischen Typen zu verweisen. Gibt es eine klare Anleitung, die speziell die Syntax für den Verweis auf die verschiedenen Datentypen beschreibt (char, *char, *char[], int, struct, void, null, Funktionen usw.)? Sogar eine Liste von Schritten, die mir helfen würden, den Regelsatz zu verstehen, wäre nützlich.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage