Beispiel, warum jemand sollte mit triple-Zeiger in C/C++?
Ich bin auf der Suche für ein Beispiel oder eine Erklärung dafür, warum sollte jemand verwenden ODER nicht mit triple-Zeiger in C/C++. Gibt es source-code, in denen die triple-Zeiger entstehen?
Vielen Dank im Voraus.
Edit: vor Allem, ich bin auf der Suche nach einem source-code, der verwendet triple-Zeiger.
- Das ist, wie Sie sich ein drei-Sterne-programmer.
- Ich will nicht zu sein "drei-Sterne-Programmierer" an alle 😉
- Ich bin versucht zu posten "wenn Sie nicht verstehen, das Konzept der Abstraktion." als Antwort, aber ich denke, jetzt werde ich nicht.
- Ich möchte sehen, wie Beispiel-code, was eine dreifach-Zeiger ist.
void MakeJagged( int*** arr, int width, int height );
- Wenn Sie möchten, schreiben Sie eine Funktion, die ändert eine
**
. In C, ohne Referenz, benötigen Sie eine weitere Ebene, die der Zeiger. - Eine bessere Frage wäre: ein Beispiel, warum sollte man Sie NICHT verwenden die triple-Zeiger...
- Vielleicht sollten Sie wählen Sie eine Sprache. Ich kann nicht denken Sie an eine situation, wo Sie brauchen eine dreifach-Zeiger in C++.
- dieselbe Liste, wirklich, etwas mit der Umsetzung und use-cases Hinzugefügt.
- "Edit: vor Allem, ich bin auf der Suche nach einem source-code, der verwendet triple-Zeiger." THX für den Hinweis darauf, warum diese Frage ist off-topic.
- Erklären Sie bitte, warum?
- Fragen für die Listen und die Vorschläge, ist verpönt. Zeiger auf Zeiger auf Zeiger ist ziemlich ungewöhnlich. Andere als ein drei-dimensionales array, ich habe nur gesehen, wie er verwendet legitim, einmal oder zweimal,, und diejenigen, die wahrscheinlich hätte vermieden werden können. Der rest so Aussehen: stackoverflow.com/questions/30387128/...
- aGer: Es gibt nichts besonders unheimlich oder Magie über mehrere Umleitung. Triple indirection ist relativ selten, aber es gibt Anwendungsfälle, für die es (R, ist eine von den besseren). Anstatt zu sagen "ich will nicht, um ein drei-Sterne-Programmierer", die Zeit nehmen, um zu erfahren, warum solche Konstrukte existieren können. Manchmal müssen Sie arbeiten mit hoch-dimension data. Manchmal muss man mehrere Ebenen der Dereferenzierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das beste Beispiel, das mir einfällt, ist eine sparse-multi-level-Tabelle. Zum Beispiel wird die Implementierung der Eigenschaften für Unicode-Zeichen können sein:
In diesem Fall
proptable
müsste einen dreifach-Zeiger-Typ (und evtl. vierfach-Zeiger, wenn die endgültigen Typ ist ein Zeiger-Typ). Der Grund für dies zu tun, da mehrere Ebenen eher als ein flacher Tisch ist, dass an der ersten und zweiten Ebenen, können mehrere Einträge zeigen auf die gleiche Untertabelle abgerufen, wenn der Inhalt der gleiche ist (z.B. riesige CJK-Bereich).Hier ist ein weiteres Beispiel für eine multi-level-Tabelle, die ich umgesetzt habe; ich kann nicht sagen, ich bin furchtbar stolz auf das design, aber angesichts der Einschränkungen des Kodex zu erfüllen, ist es eines der am wenigsten schlechte Umsetzung Möglichkeiten:
http://git.musl-libc.org/cgit/musl/tree/src/aio/aio.c?id=56fbaa3bbe73f12af2bfbbcf2adb196e6f9fe264
68*128*128*sizeof ***proptable
bytes an Speicher, der ist riesig. In der Praxis werden solche multi-level-Tabellen passen in mehrere kb.*
dann ist es ein triple-ZeigerWenn Sie brauchen, um wieder ein array von Zeigern auf Zeichenfolgen variabler Länge über eine Funktion parameter:
Kompilierten code.
i
in die error-recovery-code) und Zeiger (variablepointers
im code), um die Funktion.Wenn Sie eine verlinkte Liste haben, die zum speichern der Adresse des ersten Elements der Liste
( first pointer )
.Wenn Sie Sie brauchen, um in diese Liste benötigen Sie einen anderen Zeiger
( two pointer)
Wenn Sie brauchen, um passieren Ihre Liste, die Sie ändern in zwei Zeiger und ändern Sie es in eine andere Funktion benötigen Sie einen anderen Zeiger
( three pointer )
...Werden Sie eine Menge von Beispielen
Ich verwendet habe, dreifach-Zeiger in C++:
Gibt es ein interface geschrieben für ein Java-Programm:
https://github.com/BenLand100/SMART/blob/master/src/SMARTPlugin.h
und es nimmt ein array von strings.
Dann in meinem Programm mache ich:
aber in C++ können Sie eine Referenz statt Zeiger und es würde geworden:
Merke jetzt, dass "ButtonTexts" ist eine Referenz auf ein array von C-style strings jetzt.
Einen
char***
kann ein Zeiger auf ein array von C-style strings-und das ist eine Zeit, die Sie würde es nutzen.Ein sehr einfaches Beispiel ist ein Zeiger auf ein array von arrays von arrays.
Dreifach-Zeiger eine Zeigervariable, zeigt auf einen Zeiger, der wiederum verweist auf einen anderen Zeiger. Die Verwendung dieser komplexen Technik ist, dass in der Regel in dem Unternehmen Prozess-Tonnen und Tonnen von Daten zu einer Zeit .Einen einzelnen Zeiger würde, zeigen Sie auf einen einzelnen block von Daten (angenommen, in einer großen Datei) über die dreifach-Zeiger, würde das Ergebnis 3 mal schnellere Verarbeitung als unterschiedliche Blöcke von Daten(in der gleichen Datei) kann festgestellt werden durch verschiedene Zeiger, und damit die Daten zugegriffen werden kann/schneller verarbeitet (im Gegensatz zu 1 Zeiger gehen durch die gesamte Datei).