003
23.08.2003, 10:42 Uhr
virtual
Sexiest Bit alive (Operator)
|
Klar ist m_iArray ein Zeiger auf das ganze Array. Im allgemeinen kann man den namen des Arrays als dessen Zeiger verwenden. Wenn Ich also ein
habe dann ist array ein Zeiger auf ein int. Oder allgemeiner: Ist
gegeben, dann kann man array in den meisten Fällen wie ein type* verwenden.
Bei dem 2D Array sieht es so aus:
Also ist array eigentlich ein Array von 7 eindimensionalen Arrays (welches auch jeweils 7 Elemente beinhalten). Expliziter geschrieben also:
C++: |
typedef int ein_dimenisionales_array[7]; ein_dimensionales_array array[7];
|
Folglich kann array meistens wie ein Zeiger auf den Typen ein_dimensionales_array verwendet werden, oder kurz auf ein int (*)[7]. Nun sind aber "int*" und "int*[7]" unterschiedliche Typen und genau das bemängelt Dein (C++) Compiler. Ich möchte jetzt nicht im Detail auf den Unterschied zwischen Array Namen und Zeiger eingehen (zB folgt aus obigen überlegungen nicht, daß m_iArray zuweisungkompatibel mit einem int** ist), allerdings verhält es sich so, daß bei einem
Die Daten tatsächlich hintereinander im Speicher gehalten werden, so daß sie kompatibel mit einem int* sind. In C, was im unterschied zu C++ etwas weniger genau arbeitet, was die Typsicherheit angeht, ist dies dann sogar keine Fehlermeldung, sondern nur eine Warnung. Um die fehlermeldung wegzubekommen, mußt Du in C++ casten, etwa so:
C++: |
return reinterpret_cast<int*>(m_iArray);
|
Beachte: der rinterpret_cast schmälert generell die Portabilität Deines Programms! -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 23.08.2003 um 10:44 Uhr von virtual editiert. |