Referenz heißt, dass die Adresse eines anderen Speicherbereichs gespeichert wird (also auf den Speicher gezeigt wird).
Dereferenzieren heißt, du folgst der Adresse und greifst auf den Speicherbereich zu, von dem du die Adresse gespeichert hast.
Die Adresse ist die Adresse des Speicherbereichs, wo die variable gespeichert ist.
int orginal = 42; /*Erstelle variable*/
printf("Adresse: %d\n", & orginal); /*mit dem & vor der variable erhälst du die Adresse*/
int kopie = orginal; /*Kopiere des Orginals, hier wird der Inhalt kopiert*/
int *referenz;
refernez = &orginal; /*Erstelle eine Referenz die auf den Speicherbereich der variable Orginal zeigt, hier wird nichts kopiert*/
orginal = 0; /*Weil referenz auf den selben Speicher zeigt, ist *referenz nun auch 0*/
printf("orginal: %d, referenz: %d", orginal, *referenz); /*mit * vor der variable dereferenzierst du*/
printf("Speicheradresse orginal: %d, referenz: %d", &orginal, referenz); /*gibt beidesmal die Adresse vom orginal aus*/
referenz = &kopie; /*nun zeigt die referenz auf den Speicherbereich der variable kopie und somit auf 42*/
int **referenz2; /*man kann auch zeiger auf zeiger erstellen...*/
referenz2 = &referenz;
printf("Kopie referenziert: %d", **referenz2);
int ***referenz3;
referenz3 = &referenz2;
printf("Kopie referenziert: %d", ***referenz3);
/*uns so weiter*/
referenz = *orginal; /*nun zeigen referenz, referenz2, referenz3 wieder auf das orginal, also 0*/
Hoffe das ist einigermaßen verständlich. Ich weiß das das Thema in C/C++ nicht so einfach ist.
LG