Wie Sie einen Zeiger wieder anstelle eines Wertes:
Ein in der Regel Pointer-Arithmetik verwendet, wenn sie wollen wieder einen Zeiger zu bekommen. Um einen Zeiger zu erhalten, während ein Array-Index verwendet wird: 1) Berechnen des Zeiger-Offsets, dann 2) Abrufen des Wertes an diesem Speicherort, dann 3) Sie müssen & verwenden, um die Adresse erneut zu erhalten. Das ist mehr Eingabe und weniger saubere Syntax.
Beispiel 1: Angenommen, Sie haben in einem Puffer
char buffer[1024]
char *p = buffer + 512;
ist sauberer als einen Zeiger auf das 512. Byte benötigen:
char buffer[1024];
char *p = &buffer[512];
Beispiel 2: Effizientere strcat
char buffer[1024];
strcpy(buffer, "hello ");
strcpy(buffer + 6, "world!");
Dies ist sauberer als:
char buffer[1024];
strcpy(buffer, "hello ");
strcpy(&buffer[6], "world!");
Verwendung Zeigerarithmetik ++ als Iterator:
Zeiger mit ++ Inkrementieren und Dekrementieren mit - ist nützlich, wenn sie über jedes Element in Iterieren eine Reihe von Elementen. Es ist sauberer als eine separate Variable zu verwenden, um den Offset zu verfolgen.
Zeiger Subtraktion:
Sie können Zeiger Subtraktion mit Pointer-Arithmetik verwenden. Dies kann in einigen Fällen nützlich sein, um das Element vor demjenigen zu erhalten, auf das Sie zeigen. Es kann auch mit Array-Indizes gemacht werden, aber es sieht wirklich schlecht und verwirrend aus. Vor allem für einen Python-Programmierer, wo ein negativer Index angegeben wird, um etwas vom Ende der Liste zu indizieren.
Aber Sie haben immer noch die Gesamtzahl der Variablen. – Uri
Sie wissen, ein even ** cleaner ** für das zweite Beispiel wäre 'sprintf (buffer,% s% s", "hallo", "world!") '. –
@sgm, und teuer –