*(temp + count) = *(foo + i);
Die Operatoren +
führen Zeigerarithmetik aus. Das Hinzufügen einer ganzen Zahl zu einem Zeigerwert ergibt einen neuen Zeiger, der eine spezifizierte Anzahl von Objekten nach dem ursprünglichen Zeiger inkrementiert. Zum Beispiel, wenn ist ein Zeiger auf arr[0]
, dann Punkte auf arr[2]
.
Der *
Operator deferences der resultierende Zeiger, der Ihnen das Objekt gibt, auf das es zeigt.
In der Tat ist der Array-Indexierungsoperator in Bezug auf Zeigerarithmetik definiert, so dass A[i]
bedeutet *(A+i)
(Ignoring Operatorüberladung). So die obige Codezeile:
*(temp + count) = *(foo + i);
auch geschrieben werden konnte (deutlicher IMHO) als:
temp[count] = foo[i];
Sie könnten die comp.lang.c FAQ, insbesondere die Abschnitte 4 (Pointers) und 6 (Arrays lesen möchten und Zeiger). Die meisten Informationen gelten auch für C++.
Allerdings stellt C++ höhere Bibliotheksschnittstellen bereit, die robuster sein können als die Low-Level-C-Entsprechungen. In C++ ist es selten sinnvoll, Code zu schreiben, der sich direkt mit Arrays und Pointern auf Array-Elemente befasst, es sei denn, es handelt sich um Code auf sehr niedriger Ebene und die Performance ist von entscheidender Bedeutung und/oder es handelt sich um Datenstrukturen aus C-Code.
Ich kann nicht glauben, dass wir kein entsprechendes Duplikat für diese Frage haben. –
Das ist eine ziemlich gute erste Frage, aber ich habe viele überflüssige Worte weggelassen. Keine überflüssigen * Informationen *, gemäß Ihrer ursprünglichen "Entschuldigen Sie irgendwelche überschüssige Information" Linie; insbesondere hast du damit angefangen zu sagen, du wärst verwirrt über eine * bestimmte Zeile * im Programm, aber ohne deine "extra" -Information hätte es keine Hinweise darauf gegeben, * welche * Zeile dich verwirrt hat! –
Dies ist eine alternative Syntax zur Array-Indizierung. –