grundlegende Bedeutung von NULL!



  • Hallo guten Tag,
    man begegnet immer wieder der NULL Abfrage die ich selber aber noch nicht benutzt
    habe, in Oracle war es uns in der Schule vielleicht nicht gut erklärt worden, da dort gesagt worden war es bedeute eine Negation also logisch Null aber es wäre auch nicht wirklich 0 als logischer Wert ? Also eine bestimmte Belgegung,die sagt:
    NULL, nicht belegt, aber auch nicht 0 ? Soweit konnte Ich dem dann noch klar folgen. Das Problem allerdings NULL wird in C++ und auch anderen Sprachen oft
    einfach benutzt ohne das irgendetwas mit NULL vorher explizit belegt wurde ?
    Das ist irgendwie widersprüchlich ?
    Beispiel:

    FUNKTION deleteElement( Datum )
       {
          Zeiger *aktuellesElement = NULL;
          Zeiger *nächstesElement = ErstesElement();
    
          SOLANGE ( nächstesElement != NULL )
          {
             WENN (nächstesElement->Datum == Datum) // ''zu löschendes Element gefunden''
             {
                WENN ( aktuellesElement != NULL ) // ''wir befinden uns nicht am Listenbeginn''
                {
                   WENN ( nächstesElement->pNext != NULL) // ''wir befinden uns nicht am Listenende''
                   {
                      aktuellesElement->pNext = nächstesElement->pNext;
                      Lösche nächstesElement;
                   }
                   SONST // ''wir befinden uns am Listenende''
                   {
                      aktuellesElement->pNext = NULL;
                      Lösche nächstesElement;
                   }
                }
                SONST // ''wir befinden uns am Listenbeginn''
                {
                   WENN ( nächstesElement->pNext != NULL) // ''wir befinden uns nicht am Listenende''
                      Setze Listenbeginn auf nächstesElement->pNext;
                   SONST // ''wir befinden uns am Listenende - wir löschen das einzige Element, Liste ist nun leer''
                      Setze Listenbeginn auf NULL;
    
                   Lösche nächstesElement;
                }
             }
             AktuellesElement = nächstesElement;
             nächstesElement = nächstesElement->pNext;
          }
       }
    

    Mein Problem, wenn NULL kein bestimmter Wert in C++ ist, der vorher auf das Feld oder auf die Variable was auch immer durch einen Befehl draufgeleget wird ! -
    Mit Was ist seine exakte Bedeutung für den Compiler äquivalent, mir ist schon
    klar ,dass es halt bedeutet das in dem Beispiel an der Positon nichts eingetragen
    ist; aber was ist Null, wenn der Programmierer hier nicht ersichtlich vor der Abfrage auf NULL dort Null eingetragen hat ? Es stört, wenn man nicht die logische Zuordnung zu dem Quelltext sehen kann ? ist Null wie false und true ein Schlüsselwort das der Compiler einfach kennt ?



  • also unter c++ ist NULL == 0, wenn sich das nicht zwischenzeitlich geändert hat.

    laut stroustrup persönlich ist es nicht schön, NULL zu verwenden und eigentlich kannst es dir auch sparen, und einfach 0 verwenden.

    praktische anwendungsgebiete sind das "entschärfen" von wilden zeigen, sprich du setzt sie dann =NULL oder =0 und wenn du dann schreibend auf sie zugreifst, schmiert dir das programm ab, anstatt irgendwo wild im speicher rumzuschreiben.



  • Für Nullzeiger gibt es nullptr, NULL sollte nicht verwendet werden. Auf solch einen Nullzeiger zuzugreifen ist undefiniert, meist stürzt es ab.



  • was vielleicht nicht verkehrt ist, da dann irgendetwas nicht stimmt.



  • HansKlaus schrieb:

    laut stroustrup persönlich ist es nicht schön, NULL zu verwenden und eigentlich kannst es dir auch sparen, und einfach 0 verwenden.

    Das Zitat muss recht alt sein. Heute würde er sicher zu nullptr raten, wenn der Pointer gemeint ist.

    Sofern man die Zahl 0 meint: 0 verwenden.
    Sofern man den Nullpointer meint: nullptr verwenden. Grund: Typsicherheit, der nullptr wird nicht einfach in einen int umgewandelt.

    Hier mal ausführlicher was dazu: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf



  • Danke, die Antworten machen es verständlich !



  • Techel schrieb:

    Für Nullzeiger gibt es nullptr, NULL sollte nicht verwendet werden. Auf solch einen Nullzeiger zuzugreifen ist undefiniert, meist stürzt es ab.

    Stimmt, wenn zugreifen = dereferenzieren. Mann kann aber den Pointerwert testen:

    int* p = nullptr;
    if(p) ...
    if(p==nullptr) ...
    


  • Ja, das stimmt natürlich.


Log in to reply