2010-04-01 7 views

Antwort

6

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.

+0

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. –

+0

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

+0

@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). –

1

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.

4

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.

Verwandte Themen