If + Pointer



  • Kannst Du. Die Unterscheidung dient eher der Lesbarkeit, der Compiler unterscheidet
    das nicht. Hau rein !



  • Hat also NULL die selbe Funktion wie 0 bei Pointern?

    Ich habe mal folgendes Probiert und bin über die letzten 2 Ergebnisse etwas verwundert. Ich dachte, ein Pointer bekommt standardmäßig 0/NULL als Wert. Scheint aber doch nicht so zu sein...?

    char* pa;
    char* pb;
    
    pa = NULL;
    pb = 0;
    
    if (pa == pb) printf("A");
    

    Ausgabe: A

    ---

    char* pa;
    char* pb;
    
    //pa = NULL;
    pb = 0;
    
    if (pa == pb) printf("B");
    

    Ausgabe: nix

    ---

    char* pa;
    char* pb;
    
    pa = NULL;
    //pb = 0;
    
    if (pa == pb) printf("C");
    

    Ausgabe: nix

    Hä, wie jetzt? 😮



  • "Hä" ist immer gut.

    Pointer werden vom Compiler auch mal so initialisiert, abhängig ob sie global
    oder lokal für eine Funktion sind. Im Normalfall werden globale (also außerhalb einer
    Funktion definierte) Pointer und Variable eh auf 0 gesetzt.

    Sicherheitshalber sollte man denen aber immer einen Wert zuweisen.



  • Scheppertreiber schrieb:

    Im Normalfall werden globale (also außerhalb einer
    Funktion definierte) Pointer und Variable eh auf 0 gesetzt.

    Ist das so? Wusste ich gar nicht. Na ja, Globale sollten sowieso vermieden werden, und zumindest lokale Pointer werden, wie alle anderen Variablen auch, {i]nicht[/i] initialisiert. Man sollte immer NULL oder direkt einen validen Wert zuweisen. daniel.k, du kriegst natürlich keine Ausgabe, wenn du 0 und eine beliebige Stelle im Speicher vergleichst. Nur in ganz seltenen Fällen könnte diese zufällig 0 sein...



  • Es gibt keinen vernünftigenn Grund, globale Pointer nicht zu verwenden.
    Ansonsten hast Du mich wiederholt, das hilft ihm auch nicht weiter.



  • Das hat weniger mit global/lokal zu tun, als mit der Speicherklasse.



  • Sers Tim,

    eine Speicherklasse wollte ich auch immer schon mal haben 🙂

    Laß den OP mal machen, der hat ganz andere Probleme.



  • Im Normalfall werden globale (also außerhalb einer
    Funktion definierte) Pointer und Variable eh auf 0 gesetzt.

    Aber nur wenn sie static sind.
    Der Rest ist - Wind.



  • Hallo und danke für die Antworten.

    Achso, B und C sind nur nicht erschienen, weil C/++ lokale Variablen nicht selbst initialisiert und der Wert des neuen Pointers dann dem zufälligen Speicherinhalt entspricht. (Diese Mal-So-Mal-So 0-Initialisierung von Variablen/Feldern hat mich schon in Java geärgert, aber da wurde man am Compilieren gehindert, wenn man was nicht initialisiert hatte) Dann kann es ja nicht 0/NULL äquivalent sein. Wär aber mal eine gute Idee für ein neues Lotto...

    Gruß
    daniel.k



  • ^^klar, lokale variablen müssen vor dem ersten lesezugriff einen gültigen inhalt haben. manche compiler warnen auch, wenn man lesend auf eine lokale variable zugreit, ohne vorherigen schreibzugriff oder 'ne initialisierung.
    🙂



  • Man sollte sich generell angewöhnen, Vaiable zu initalisieren. Wenn's der
    Compiler mal nicht merkt ... (und es meckern nicht alle).


Anmelden zum Antworten