2016-04-10 3 views
-6

Angenommen, wir haben ein multidimensionales Array.Wie & multi [3] [0] und * (multi + 3) sind das Gleiche?

multi[3][10] 

dann &multi[0][0] wird Multi

, wenn wir jedes Element in diesem Array zugreifen möchten. Wir brauchen nur eine Dereferenzierung. wie es sich ständig befindet. Ich bin nicht in der Lage, doppelte Dereferenzierung zu verstehen. als

*(*(multi+row)+column) 
+0

"' & multi [0] [0] 'wird' multi' "- nein wird es nicht. Es wird wahrscheinlich identisch gedruckt, wenn Sie versuchen, es zu drucken, aber ihre Typen sind sehr unterschiedlich. Die Dereferenzierung der ersten führt zu einem völlig anderen Ergebnis als bei der Dereferenzierung der Sekunde. – user2357112

+0

Was ist der Typ? –

+0

@SetAnand; Du kennst nicht "Typ", ernsthaft? – haccks

Antwort

2

&multi[0][0] ist die Adresse des ersten Elements des Arrays, die an multimulti[0] entspricht.

multi ist ein Array von 1D-Arrays. multi wird zum Zeiger auf sein erstes Element zerfallen, wenn es in einem Ausdruck verwendet wird, außer wenn ein Operand sizeof und unary &.
Im Ausdruck

*(*(multi+row)+column) 

Die inneren * ist zu dereferenzieren einem 1D-Array (eine Zeile) und die äußeren * ist zu dereferenzieren dem Elemente dieser Reihe.

*(multi + row) => multi[row] 
*(*(multi+row)+column) => *(multi[row] + column) => multi[row][column] 
+0

Sie meinen multi [0] ist ein Zeiger. So sollte es Adresse geben. Aber es gibt stattdessen den Wert. –

+0

'multi [0]' ist ein Array von 10 'int'. Die Abklingregel wird wie andere Arrays angewendet. – haccks

+0

Int * ptr = multi –