C++ Zeiger



  • Hier bin ich wieder :p

    char r='u';
        void *i;
        i=&r;
        std::cout << *i;
    

    Warum geht das nicht?
    Soweit ich weiß, ist der Zeiger doch auf ein Unbekannten Typ, und so sollte es gehen.



  • Richtig, i zeigt auf einen unbekannten Typ. Deswegen kann er *i nicht auswerten, weil er nicht weiß, auf welchen Typ i zeigt.



  • SeppJ schrieb:

    @Skym0sh0: Ja, aber der Grund, warum C und C++ schnell sind, ist ein ganz anderer.

    Ja da hast du recht.
    Ich merk grad, dass ich etwas um die Ecke, bzw. vorschnell gedacht habe:
    Einer der Gründe, warum man mit C/C++ mehr Speed rausholen kann ist, dass man sich selber um Speicherallokation bzw. Deallokationen kümmern kann. Wenn man da Dinge weiss, wie Speicher wann und in welcher Menge gebraucht wird, kann man schön optimieren.
    Mein Gedanke war, dass dabei ja mehr oder weniger viel Zeiger gebraucht werden. Daher meine ursprüngliche Aussage.

    Sorry für die ungenauen Aussagen, das sollte ich echt mal in naher Zukunft ausmerzen. -.-'



  • Also kann das gar nicht funktionieren?
    Und wenn ja, weil so wie ich das im Buch verstanden habe ist das auch ein "Vorteil" von den Zeigern.



  • Sry für Doppelpost.
    Hier nochmal einwenig Code:

    char *cp; // Zeiger auf char
        void *vp; // Zeiger auf void
        vp = cp;
    

    Das geht, aber ich kann cp keinen Wert wie z.B. "u" zuweisen.
    Wieso nicht? :I



  • *cp = 'u';
    

    Geht doch ?
    Mal davon abgesehen dass cp nirgendwohin zeigt...



  • Ich hasse Zeiger 😃
    Aber danke für die Antwort.



  • Halllo
    eine Verstädnisfrage habe ich mal:

    int ∗ip = &i;//SO weise ich dem Zeiger eine neue Adresse zu?
    ∗ip = 8;//So weise ich der Adresse einen neuen Wert zu?
    


  • Ups...
    Das sollen sternchen (*) sein. (∗)



  • int * ip = &i;
    *ip = 8;
    

    Wenn das der Code war, ja zu deiner Frage.



  • Nochmal kurz zur Erklärung:

    int i1, i2;
    
    int* pointer; // definiert einen pointer auf integer
    int* pointer = &i1; // definiert einen pointer auf integer, und weißt ihm die addresse von i1 zu
    
    //wenn du pointer schreibst greifst du auf die Adresse zu:
    pointer = &i2; //Weist pointer die Adresse von i2 zu
    std::cout << pointer; // gibt die adresse aus
    
    //wenn du *pointer schreibst gibst du den Wert aus auf den pointer zeigt
    *pointer = 42; //der wert ist jetzt 42
    std::cout << *pointer; //gibt 42 aus.
    

    Das Sternchen sorgt dafür dass der Pointer dereferenziert wird. Außer bei der Definition des Pointers, das ist vielleicht etwas verwirrend.



  • Skeptar. schrieb:

    Das geht, aber ich kann cp keinen Wert wie z.B. "u" zuweisen.
    Wieso nicht? :I

    Vorsicht! "u" ist ein Stringliteral und somit const char* .
    Das ist etwas anderes als das Zeichen 'u'.

    Es geht

    cp = "u";
    //oder 
    *cp = 'u'; // Hier muss cp aber auf gültigen Speicher zeigen.
    


  • Oder

    c = u8"u";
    

    Je nach Typ von c gehen auch

    c = u"u";
    
    c = U"U";
    
    c = L"L";
    

Anmelden zum Antworten