2016-10-12 16 views
-1

Die Frage ist, die Ausgabe des folgenden Programms zu finden. Das kam in meinem Test heraus und ich habe mich geirrt. Meine Antwort war 4, 7, 10. Die Antwort ist 4,8,12, aber ich brauche eine Erklärung, wie es funktioniertMultidimensionales Array

#include<iostream> 

using namespace std; 

int main() 
{ 
    int number = 4; 
    int array[] = {7,8,9,10,11,12,13}; 
    int *p1 = &number ; 
    int *p2 = array; 
    int *p3 = &array[3]; 
    int *q[] = {p1,p2,p3}; 

    cout << q[0][0] << endl ; 
    cout << q[1][1] << endl ; 
    cout << q[2][2] << endl ; 

    return 0; 
} 
+0

Sie können einfach den Code zum Beispiel auf ideone ausführen: http://ideone.com/DPdvKx –

+0

Ich wusste die Antwort, ich wollte nur eine Erklärung, wie das funktioniert – Teeban

+0

Dann editieren Sie bitte Ihre Frage, um dies zu sagen. Es sollte sagen, ich dachte die Antwort ist ... weil ... während es ist ... warum ist das so? –

Antwort

3

Was Sie haben, ist nicht ein mehrdimensionales Array (C++ nicht habe es wirklich). Was Sie haben, ist eine Reihe von Zeigern. Und Zeiger können wie Arrays indiziert werden.

In "Grafik" bilden das Array q etwa wie folgt aussieht:

 
+------+------+------+ 
| q[0] | q[1] | q[2] | 
+------+------+------+ 
    |  |  | 
    v  |  v 
+------+ | +-----+----------+----------+-----+ 
|number| | | ... | array[3] | array[4] | ... | 
+------+ | +-----+----------+----------+-----+ 
      v 
      +----------+----------+-----+ 
      | array[0] | array[1] | ... | 
      +----------+----------+-----+ 

Einige Hinweise:

Was die meisten Leute nennen multidimensionalen Arrays tatsächlich Arrays von Arrays sind. Ähnlich wie Sie ein Array von ganzen Zahlen haben können, oder wie im Fall von in Ihrem Code ein Array von Zeigern auf Ganzzahlen, kann man auch ein Array von Arrays von ganzen Zahlen haben. Für mehr "Dimensionen" ist es nur eine weitere Verschachtelung von Arrays.

Was, warum Zeiger und Arrays können beide die gleiche Art und Weise indiziert werden, dann ist es, weil für jedes Array oder Zeiger a und (gültig) Index i, a[i] die Ausdrücke gleich *(a + i) ist. Diese Gleichheit ist auch der Grund, warum Sie ein Array als Zeiger auf sein erstes Element verwenden können. Um einen Zeiger auf ein Array-Element zu erhalten, kann man &a[0] schreiben. Es ist gleich &*(a + 0), wobei sich die Adressen- und Dereferenzierungsoperatoren gegenseitig aufheben, was zu (a + 0) führt, was dasselbe ist wie (a), was dasselbe ist wie a. So sind &a[0] und a gleich.

+0

große ASCII-Kunst :) –

+0

Wie hast du die ASCII-Kunst obwohl? – PRP

+0

@PRP Gerade schrieb es direkt in die Antwort. :) –

0

q[0] ist in der Tat p1, q[1] ist in der Tat p2 und Q [2] ist p3.

Jetzt p1 ist die Adresse des number so p1 [0] ist einfach der Wert der Zahl, die Sie korrigieren 4.

p2 Punkte Array berechnet werden, so p2 [1] das gleiche wie Array [1 ] Das ist das zweite Element in Array 8.

p3 verweist auf den Sub-Array von array ausgehend von Position 3. So ist p3[2] die gleiche wie array[3 + 2] = array[5] = 12.