zeiger *g*



  • hi
    wie kann ich denn besser mit zeigern umgehen?

    int ival = 1024;
    int cpp *gar = &ival;
    

    das ist ja soetwas wie referenzen 🙄
    aber..

    1 - was kann man damit machen?
    2 - wozu ist es gut?
    3 - gibts sehr gute tutorials im i-net darüber?

    bis bald
    aquari





  • Hallo

    1. Vor allem dynamische Speicherverwaltung und polymorphe OOP
    2. siehe 1.
    3. siehe zum Beispiel hier

    int cpp *gar = &ival;
    

    Was soll das cpp dort?

    bis bald
    akari



  • wxmen_cpp schrieb:

    hi
    wie kann ich denn besser mit zeigern umgehen?

    int ival = 1024;
    int cpp *gar = &ival;
    

    das ist ja soetwas wie referenzen 🙄
    aber..

    1 - was kann man damit machen?
    2 - wozu ist es gut?
    3 - gibts sehr gute tutorials im i-net darüber?

    bis bald
    aquari

    hier "gar" ist ein pointer zu pointer.
    Normalerweise benutzt man es, um in der Subfunktion platz zu reservieren od. verändern
    hier ist mein Beispiel(mixed with c/c++)

    #include <iostream>
    #include <string>
    using namespace std;
    
    void GetStr(char** inout_str)
    {
       const string fillStr = "hallo world";
       *inout_str = (char*)malloc(fillStr.length()+1);
       strcpy(*inout_str, fillStr.c_str());
    }
    
    int main()
    {
       char* str = NULL;
       GetStr(&str);
       cout<<"show Str = "<<str;
       if (str != NULL)
          free(str);
       return 0;
    }
    

    Nachteil ist, man muss ausserhalb der Subfunktion die Reservierung löschen.



  • netrobot schrieb:

    hier "gar" ist ein pointer zu pointer.

    Nein es es ein einfacher Zeiger, und kein Zeiger auf einen Zeiger.

    netrobot schrieb:

    Normalerweise benutzt man es, um in der Subfunktion platz zu reservieren od. verändern
    hier ist mein Beispiel(mixed with c/c++)

    Was ist "C/C++"? 😃

    netrobot schrieb:

    #include <iostream>
    #include <string>
    using namespace std;
    
    void GetStr(char** inout_str)
    {
       const string fillStr = "hallo world";
       *inout_str = (char*)malloc(fillStr.length()+1);
       strcpy(*inout_str, fillStr.c_str());
    }
    
    int main()
    {
       char* str = NULL;
       GetStr(&str);
       cout<<"show Str = "<<str;
       if (str != NULL)
          free(str);
       return 0;
    }
    

    Nachteil ist, man muss ausserhalb der Subfunktion die Reservierung löschen.

    Und man macht sowas nicht.

    BR
    Vinzenz



  • evilissimo schrieb:

    Nein es es ein einfacher Zeiger, und kein Zeiger auf einen Zeiger.

    das hast du recht, hab nicht genau geschaut.

    Was ist "C/C++"? 😃

    ich werde hier Referenz auf Zeiger benutzen in C++
    etwa:

    void GetStr(char*& inout_str)
    

    Und man macht sowas nicht.

    man macht so was, besonders in Bildverarbeitung.
    oder man muss GetStr() 2mal aufrufen, 1. bekommen die Länge auf internes String,
    2.ausserhalb platz reservieren, dann Zeiger weiter geben.
    etwa so:

    #include <iostream>
    #include <string>
    using namespace std;
    
    void GetStr(char* out_str, int* length)
    {
    
       const std::string fillStr = "hallo world";
       if (NULL == out_str)
       {
          *length = (int)fillStr.length();
       }
       else
       {
          strcpy(out_str, fillStr.c_str());      
       }
    }
    
    int main()
    {
       char* str = NULL;
       int l = 0;
       GetStr(str, &l);
       str = (char*)malloc(l + 1);
       GetStr(str, &l);
       std::cout<<"show Str = "<<str;
       if (str != NULL)
          free(str);
       return 0;
    }
    


  • netrobot schrieb:

    Und man macht sowas nicht.

    man macht so was, besonders in Bildverarbeitung.
    oder man muss GetStr() 2mal aufrufen, 1. bekommen die Länge auf internes String,
    2.ausserhalb platz reservieren, dann Zeiger weiter geben.

    Nö macht man nicht...man ruft (siehe allg. WinAPI) 2-Mal auf oder nutzt, da wir uns hier ja in einem C++Forum befinden
    einfach std::strings!



  • wieso muss man die gleiche Funktion 2mal aufrufen? und jedesmal wird nur ein Parameter verwendet.
    STL ist manchmal nicht für embeded system geeignet.



  • Also ich lese den ersten Beitrag so:

    ------------------------------

    int ival = 1024; 
    int *gar = &ival;
    

    das ist ja soetwas wie referenzen
    aber..

    1 - was kann man mit Zeifern machen?
    2 - wozu sind Zeiger gut?
    3 - gibts sehr gute tutorials im i-net über das Thema Zeiger ?
    --------------------------------

    Die Fragestellung halt also IMHO weder was mit Zeiger auf Zeiger, Referenzen auf Zeiger , mischen von C und C++ zu tun, ebenso wenig wie mit STL std::string oder C++ unbekannten Dingen wir Grafikbearbeitung oder embedded Systemen.

    (Genau genommen wäre das nicht mal eine Frage fürs C++ Forum gewesen sondern fürs C Forum ?).

    Wenn also jemand nen Link speziell zum Thema Zeiger hat, her damit. Dann wäre dem Fragesteller vermutlich eher geholfen.



  • Hallo

    warum sollte der Link den ich gepostet habe nicht zum Thema passen?

    bis bald
    akari



  • Ahhh, übersehen in dem harmlosen hier - blau auf blau 🤡 - sry

    Also den link noch mal auffällig zum abschluss:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-124532.html



  • OFF_TOPIC>>>>

    netrobot schrieb:

    wieso muss man die gleiche Funktion 2mal aufrufen?

    Einmal für die Länge des zu allokierenden Strings und einmal um den allokierten String zu füllen

    netrobot schrieb:

    und jedesmal wird nur ein Parameter verwendet.

    Ich hab ja nicht gesagt es ist sinnvoll... std::string, also STL ist besser...

    netrobot schrieb:

    STL ist manchmal nicht für embeded system geeignet.

    LOL...Embedded Systems...passen hier nun überhaupt nicht rein! ➡ Schlechtes Beipiel.

    <<<<OFF_TOPIC



  • LOL...Embedded Systems...passen hier nun überhaupt nicht rein! ➡ Schlechtes Beipiel.

    teilweise schon, embedded system benutzt auch C++, STL ist z.B. nicht unterstützt


Anmelden zum Antworten