Multidimensionaler Speicher für Arrays - Übersicht

In letzter Zeit habe ich angefangen, Zeiger und Referenzen in c ++ zu lernen (nicht nur die übliche Verwendung, sondern alle Arten von Möglichkeiten, ich möchte in naher Zukunft keine Probleme damit haben).

Aus meiner Sicht ähnelt ein statisch zugewiesenes 1d-Array einem int * const-Zeiger. Mein Problem ist, dass, wenn ich dynamisch mit einem Zeiger allokiere, der Zeiger selbst eine andere Speicheradresse als das erste Element hat, was in einem 1d-Array nicht der Fall ist. Dies ist ein Beispie

int a[5];
cout<<&a<<" "<<&a[0]<<"\n";
int* t=new int[10];
cout<<&t<<" "<<&t[0]<<"\n";

Die Ausgabe ist:

0x6afed0 0x6afed0
0x6afecc 0xcb0e40

Ich kann mir nicht vorstellen, wie das 1d-Array gespeichert ist. In einem Block mit 4 Bytes können Sie entweder einen Wert oder eine Adresse speichern. Ich habe es auch mit 2d Arrays versucht, und es gibt mehr Kreuzungen.

q = new int*[10];
for (i=0;i<10;i++)
    q[i] = new int[i+1];
cout<<&q<<" "<<&q[0]<<" "<<&q[0][0]<<"\n";
int b[10][10];
cout<<&b<<" "<<&b[0]<<" "<<&b[0][0]<<"\n";

Ausgabe

0x6afee4 0xe40e40 0xe41240
0x6afd54 0x6afd54 0x6afd54

enn mich jemand aufklären und erklären würde, wie diese Arrays gespeichert sind, wäre ich dankba

EDIT: Genauer gesagt, ich weiß und es ist logisch, wie das Array, das dynamisch mit dem neuen Schlüsselwort durch den Zeiger erstellt wird, gespeichert wird. Aber wie haben & a und & a [0] die gleichen Werte, wenn a die Adresse von a [0] speichern soll. In diesem Speicherblock (& a) wird was dann gespeichert? Der Wert von a [0] oder die Adresse von a [0] ]. Hoffe mir war klar was mein Problem ist.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage