Warum ist beim Arbeiten mit zweidimensionalen Arrays nur die zweite Dimension wichtig für einen Compiler? Ich kann es einfach nicht verstehen. DankWarum ist nur die zweite Array-Dimension wichtig?
Antwort
Da Compiler muss herausfinden, wie auf die Daten aus dem Speicher zugreifen. Die erste Dimension ist nicht wichtig, da der Compiler die Anzahl der Elemente zählen kann, wenn alle anderen Größen angegeben sind.
Beispiele:
int a1[] = { 1, 2, 3, 4 }
Compiler weiß, Platz für 4 ganzen Zahlen zuzuordnen. Nun, mit dieser:
int a2[][] = { 1, 2, 3, 4, 5, 6} }
Compiler können nicht entscheiden, ob es sein sollte a2 [1] [6] oder a2 [2] [3] oder a2 [3] [2] oder a2 [6] [1] . Sobald Sie es der zweiten Dimension mitteilen, kann es die erste berechnen.
Zum Beispiel würde der Versuch, auf Element a2 [1] [0] zuzugreifen, abhängig von der Deklaration unterschiedliche Werte ergeben. Sie könnten 2, 3, 4 oder sogar ungültige Position bekommen.
Setzen Sie sich hin und finden Sie heraus, wie Sie die Speicherposition von a[i][j]
bei gegebener Startposition des Arrays finden.
Beachten Sie, dass c-Arrays angelegt werden wie diese a[0][0]
a[0][1]
a[0][2]
... a[0][M]
a[1][0]
...
Randbemerkung: a[1][1]
a[2][1]
a[3][1]
... a[N][1]
a[1][2]
..: Fortran-Arrays sind unterschiedlich angelegt .
Beachten Sie, wie dies sich ändern würde welche Dimension zum Suchen von Speicherpositionen benötigt wird.
Es ist nicht die "zweite Dimension" (außer wenn Sie nur 2 Dimensionen haben) - es ist "alles außer der ersten Dimension". So können Sie zum Beispiel int a[][2][3][4]
haben. Ohne diese Dimensionen wäre es nicht möglich, die Adresse eines Elements zu berechnen.
- 1. OpenCL Subbuffer, warum ist wichtig?
- 2. Warum ist die Ausrichtung der Datenstruktur wichtig für die Leistung?
- 3. Warum popViewController nur jedes zweite Mal arbeiten
- 4. Warum ersetzt string.replace nur jedes zweite Vorkommen?
- 5. Ist die CSS-Dateisortierung wichtig und wenn, warum?
- 6. Warum ist die zweite statische Variablenzuweisung wirksam, nicht die erste?
- 7. Warum ist Java Secure Coding wichtig?
- 8. Ist die Datei project.xcworkspace wichtig?
- 9. ist Leerzeichen wichtig in Javascript
- 10. Warum ist die Position von geschweiften Klammern in JavaScript wichtig?
- 11. Warum ist die Reihenfolge von LEFT JOIN in MySQL wichtig?
- 12. Warum ist die Typdeklaration in einer statisch typisierten Sprache wichtig?
- 13. Warum ist eine zweite cin.ignore() notwendig?
- 14. Warum sind Binärbäume wichtig?
- 15. Ist Dims Position wichtig?
- 16. Ist die Reihenfolge der Catch-Blöcke wichtig?
- 17. Easymock: Ist die Reihenfolge der Eroberungen wichtig?
- 18. Warum ist es wichtig, dass ein Binärbaum ausgeglichen ist?
- 19. Was ist Assoziativität von Operatoren und warum ist es wichtig?
- 20. Ist die Reihenfolge der xmlns Elemente wichtig
- 21. SQL Server - Ist die Spaltenreihenfolge wichtig?
- 22. Ist die Größe der Datenbankfelder wichtig?
- 23. MIPS - Ist es wichtig?
- 24. Ist DLL-Größe wichtig?
- 25. Bedeutung der Bandbreite in CUDA und warum es wichtig ist
- 26. Wie wichtig ist WCAG und warum bekomme ich diesen Fehler? nur laufen Analyse
- 27. Option.fold - Warum ist das zweite Argument kein binärer Operator?
- 28. Warum ist der Schrägstrich im Webservice so wichtig?
- 29. Mastermind mit doppelten Pegs (editierte nur Teile, die wichtig sind)
- 30. Die! Wichtig; tag
Könnten Sie bitte ein Beispiel geben? Wie kommt es, dass, wenn ich einen [3] [4] Compiler brauche, nur ein [] [4] benötigt? Ich kann das nicht verstehen. Ja wirklich. –
Es gibt dem Compiler gerade genug Informationen, um zu wissen, wie man Dinge im Speicher ablegt. Wenn Sie 12 Elemente haben und sagen Sie ihm ein [] [], könnten es zwei beliebige Zahlen (x & y) sein, die zu 12 multiplizieren. Wenn Sie ihm ein [] [4] geben, weiß es, dass x und 4 zu 12 multiplizieren , so muss x 3 sein. Wenn es hilft, es logisch zu machen, richten Sie eine grundlegende Gleichung mit jeder Dimension auf der linken Seite und der Gesamtzahl der Elemente auf der rechten Seite ein. Es ist schwierig oder unmöglich, mehr als eine Variable zu lösen. – ssube
@peachykeen: das ist etwas irreführend. Die Dimensionen werden benötigt, um die Adresse eines Array-Elements zu berechnen. Die erste Dimension wird jedoch nicht benötigt, da sie für die Adressberechnung nicht benötigt wird (die obere Grenze ist irrelevant). –