Warum darf die erste Dimension weggelassen werden, aber nicht die anderen Dimensionen, wenn ein mehrdimensionales Array deklariert wird?

8

Warum es nicht notwendig ist, die erste Dimension eines multidimensionalen Arrays zu erwähnen und andere Dimensionen zu erwähnen:

%Vor%

Ich bin nicht in der Lage, das Konzept oder die Logik dahinter zu verstehen.

    
Rishab Shinghal 25.10.2015, 09:47
quelle

3 Antworten

5

Bei Verwendung eines mehrdimensionalen Arrays werden für die Berechnung des tatsächlichen Index alle Dimensionsgrößen außer der ersten verwendet. Beispiel: Für ein 3D-Array, das als int arr[3][4][5]; deklariert ist, ist arr[i][j][k] nach Definition *(&(arr[0][0][0]) + k + 5 *(j + 4 * i))

Wenn also die erste Dimension aus der Kontextinitialisierung abgeleitet werden kann oder ignoriert werden kann (wenn ein Parameter in einer Funktion abgerufen wird), kann sie weggelassen werden.

Beispiele:

%Vor%     
Serge Ballesta 25.10.2015 10:08
quelle
4

Es ist notwendig, beide Dimensionen von 2D-Arrays zu erwähnen, außer wenn es in den Parametern der Funktion ist oder wenn ein Initialisierer vorhanden ist, dann kann die erste Dimension weggelassen werden.

Bei Verwendung als Parameter in einer Funktion, z. B.

%Vor%

wurde in

konvertiert %Vor%

Daher kann die erste Dimension weggelassen werden. Die zweite Dimension muss jedoch vorhanden sein, um dem Compiler mitzuteilen, dass der Zeiger 2D_arr ein Zeiger auf ein Array von n ints ist.

Im zweiten Fall, wenn der Initialisierer vorhanden ist

%Vor%

Der Compiler verwendet die Länge des Initialisierers, um nur die erste Dimension zu berechnen. Der Rest der Dimension muss zum Zeitpunkt der Deklaration explizit angegeben werden.

    
haccks 25.10.2015 09:54
quelle
1

Wenn Sie ein 2D-Array auf statische Weise deklarieren ...

%Vor%

... dann sind seine zwei Dimensionen offensichtlich.

Wenn Sie ein 2D-Array auf dynamische Weise deklarieren oder als Zeiger auf Zeiger ...

%Vor%

... es sieht so aus, als ob nur eine Dimension während der Zuweisung erwähnt wird, aber das liegt daran, dass Sie zuerst die Zeilen und dann jede Spalte zuweisen. Wenn Sie ein Element erhalten oder setzen, geben Sie beide Dimensionen wie gewohnt an ...

%Vor%     
dspfnder 25.10.2015 10:15
quelle