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
    

Anmelden zum Antworten