mal wieder Pointer ...
-
Irgendwann kapiere ich es vielleicht auch, aber wie lange das noch dauert, ist derzeit noch nicht abzuschätzen. Aber zunächst ein bisschen Code:
#include <iostream> using namespace std; class CAusnahme1{ public: static int iCounter; CAusnahme1() { iCounter ++; cout << "Erstelle Klasse Ausnahme1!" << endl; } ~CAusnahme1() { cout << "Zerstöre Klasse Ausnahme1!" << endl; } }; int CAusnahme1::iCounter = 0; int main() { CAusnahme1* pC1[3]; // Array aus CAusnahme1-Pointern CAusnahme1 pC2[] = {CAusnahme1(), CAusnahme1(), CAusnahme1()}; // Array aus CAusnahme1-Objekten for (int i = 0; i < 3; i++) { pC1[i] = &pC2[i]; } cout << pC1 << endl; cout << pC1[0] << endl; return 0; }Ausgabe:
Erstelle Klasse Ausnahme1! Erstelle Klasse Ausnahme1! Erstelle Klasse Ausnahme1! 0xbfde137c 0xbfde138d Zerstöre Klasse Ausnahme1! Zerstöre Klasse Ausnahme1! Zerstöre Klasse Ausnahme1!Wieso kommen da Unterschiedliche Adressen raus bei
cout << pC1 << endl; cout << pC1[0] << endl;???
-
Das erste ist die Adresse, an der das Array liegt, dass zweite die Adresse, die im ersten Array-Element gespeichert ist.
-
Äquivalent zu
cout << pC1 << endl;ist
cout << &pC1[0] << endl;Oder ein anderes Beispiel:
void f(int*); .. int* p = new int[12]; f(p); // funktioniert, p zeigt auf das erste Element f(&p[0]); // dito f(p[0]); // funktioniert nicht, p[0] ist ein int