Zeiger??



  • vorerst mal .... wie wärs mit nem neuen nick ?!?

    zur frage... zeiger sind sehr dienliche Mittel, ich denke du hast noch nicht ganz verstanden was Zeiger sind sonst würdest du diese Frage nicht stellen

    also:

    ein Zeiger zeigt auf einen Speicherbereich.

    z.B.

    char* pcMeinZeiger; der * (Stern) gibt an das es sich um einen Zeiger handelt, noch ist dieser Zeiger nicht initialisiert!!!! sprich er zeigt auf einen ungültigen Speicher ( das ist ein Speicher wo er evtl. NICHT drauf zugreiffen darf, aber es steht auf jedenfall irgend ein Müll drin! )

    wenn ich jetzt

    pcMeinZeiger = new char[16];

    mache initialisiere ich diesen Zeiger heist mein programm hat Speicher (auf den er zugreifen kann!) für genau diese Variable zugewiesen. Es wurden 16 bytes resaviert (1 char = 1 byte) das ist von Datentyp ab!

    wenn ich jetzt folgendes mache

    pcMeinZeiger = "das ist ein test";

    weise ich dem Speicher der reserviert worden ist "das ist ein test" zu.

    pcMeinzeiger zeigt auf das erste zeichen des speicherbereichs ... auf das 'd'.

    du kannst jetzt noch mit

    pcMeinZeiger[0] (d)
    pcMeinZeiger[1] (a)
    pcMeinZeiger[2] (s)
    pcMeinZeiger[5] (i)
    pcMeinZeiger[6] (s)
    pcMeinZeiger[16] (t)

    auf die einzelnen bytes des zeigers zugreifen ...

    das sollte denk ich reichen

    viel spass beim Lernen, Lesen und experimentieren !



  • vorerst mal .... wie wärs mit nem neuen nick ?!?

    zur frage... zeiger sind sehr dienliche Mittel, ich denke du hast noch nicht ganz verstanden was Zeiger sind sonst würdest du diese Frage nicht stellen

    Man, bist Du hohl. 👎



  • :: schrieb:

    vorerst mal .... wie wärs mit nem neuen nick ?!?

    zur frage... zeiger sind sehr dienliche Mittel, ich denke du hast noch nicht ganz verstanden was Zeiger sind sonst würdest du diese Frage nicht stellen

    Man, bist Du hohl. 👎

    mit jemanden der nicht regestriert ist streite ich mich nicht rum....und deine aussage zeugt ja auch nicht gerade von intelligenz !



  • Hi,

    Zeiger sind ein sehr wichtiges Konstruckt von C++, auf dem ein großer Teil des Erfolges von C++ basiert. z.B. kann man Polymorphie, die in Stunde 17 deines
    Buches besprochen wird. Polymorphie ist eigentlich ohne zeiger nicht machbar.
    Sie basiert nämlich darauf, dass eine abgeleiteteklasse uber einen basiszeiger
    angesprochen werden. Du siehst, ohne Zeiger kommst du in C++ nicht weit.
    Viel spass beim weiteren C++-lernen

    C++eus.



  • c++eus schrieb:

    Polymorphie ist eigentlich ohne zeiger nicht machbar.

    Einspruch



  • ebenfalls Einspruch.

    Bei mir Läuft die Polymorphi quasi komplett über Referenzen ab. Allgemein verwende ich keine Zeiger mehr direkt, höchstens, wenn Container::iterator ein Zeiger ist.

    Dynamischer Speicher wird bei mir komplett von Smartpointern (oder eben Containern) verwaltet.



  • Einspruch gegen den Einspruch ^^

    meines wissens sind smartpointer nur innerhalb der ATL und der COM möglich (bin mir aber nicht 100% sicher!) und deswegen sind zeiger im c++ meines erachtens nach unerlässlich!



  • Disi schrieb:

    meines wissens sind smartpointer nur innerhalb der ATL und der COM möglich (bin mir aber nicht 100% sicher!) und deswegen sind zeiger im c++ meines erachtens nach unerlässlich!

    Dann informier dich doch noch mal



  • Zeiger sind Variablen, die Adressen beinhalten können und sie haben noch Features wie: Zugriff auf das, worauf sie zeigen. Speicherallokierung, deallokierung, etc.



  • Schau Dir auch solche Konstrukte wie (einfach oder doppelt) verkettete Listen an. Die können z.B. Zeiger auf das nächste Element beinhalten.

    #include <iostream>
    #include <iomanip>
    #include <cstddef> 
    #include <conio.h>
    using namespace std;
    
    struct ListElement // Element in einfach verketteter Liste
    { 
        int x; 
        ListElement * pNext; 
    }; 
    
    void print_list( ListElement * node ) 
    { 
        cout << setw(11) << node->x << endl; 
        if( node->pNext ) 
            print_list( node->pNext ); // Rekursion
        else
            cout << "end of list" << endl;    
    }
    
    int main( ) 
    { 
        ListElement a, b, c, d, e; 
        ListElement * phead = &a; 
    
        a.x = 7; 
        a.pNext = &c; 
    
        b.x = 19; 
        b.pNext = NULL; 
    
        c.x = -3; 
        c.pNext = &e; 
    
        d.x = 11; 
        d.pNext = &b; 
    
        e.x = -14; 
        e.pNext = &d; 
    
        print_list( phead );
    
        getch(); 
    }
    

Anmelden zum Antworten