Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

12.08.2003, 23:29

Was ist der unterschied zwischen NULL und 0 ?

Mir ist gerade langweillig und weil ich diese Frage in anderen Foren oft gesehen habe will ich doch nochmal einen kleinen Beitrag für das FAQ-Forum schreiben.

Also,

Vor langer, langer Zeit, als die Menschen noch nicht C++ kannten und sich noch mit C plagten, war NULL wie folgt definiert:

Quellcode

1
#define NULL ((void *)0)

Und als dann endlich C++ erfunden wurde, hat sich dies ein bischen geändert.

Quellcode

1
#define NULL 0

Alles Klar?!
Ein Gespenst geht um in Europa...

2

13.08.2003, 00:04

Nein nix ist klar!
Wieso wird es dann immer noch verwendet???
ebah rutangiS reniem ni relheF 01 rebü hci ssad, etniem latkraF!

3

13.08.2003, 00:05

Vielleicht weil es die wenigsten wissen.

Was meinst du überhaupt mit 'Warum wird es überhaupt noch verwendet'.
Es werden noch viele Dinge mehr aus den C-Zeiten in C++ mitreingeschlept, als du denkst.
Ein Gespenst geht um in Europa...

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

4

13.08.2003, 00:13

NULL wird verwendet um sichtbar zu machen das es sich um einen Pointer handelt der ins nichts zeigt.
Wenn du beispielsweiße ne Func wie Present hast:

Quellcode

1
2
3
4
HRESULT Present(CONST RECT *pSourceRect,
                CONST RECT *pDestRect,
                HWND hDestWindowOverride,
                CONST RGNDATA *pDirtyRegion);

Würde man sie so aufrufen:

Quellcode

1
Present(NULL, NULL, 0, NULL); // So ist jedermann klar welche Parameter Pointer sind.


Nur sollte man zu Zeiten von C++ NULL nicht mit define definieren (was ein Satz).
Sonder so:

Quellcode

1
const int NULL = 0;


So das wars von mir.
Ciao DarthB

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

13.08.2003, 00:21

@_progger_
Schwachsin ist definitonssache! Also NULL ist sogesehen typsicher da NULL keinen Typ hat und ist deshalb SEHR geeignet für Pointer. machst du aber

const int NULL = 0;

ist das schwachsinn, weil du einen typ definierst! jetzt nehmen wir mal an du hast einen char-pointer und übergibst einen Integer? --> Ääääh, bumbs....

Nebenbei: NULL ist zwar in C++ veraltet bietet aber einem schnelle einsicht Pointer zu erkennen.

Also NIX schwachsinn. bei NULL ist das ne andere sache als selbst definierte Konstakten mit #define.

6

13.08.2003, 00:24

Wozu soll man den Pointer erkenne.
Ein Gespenst geht um in Europa...

7

13.08.2003, 00:31

ok, ich sehe ein das es kein Schwachsinn ist, aber selbst Stroustrup sagte, das der gebrauch von NULL unschön ist.
Und wenn es, deiner meinung nach, auch nicht so wichtig ist die ungarische Notation zu Verwenden ist es auch nicht wichtig Zeiger zu verdeutlichen.
Ein Gespenst geht um in Europa...

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

8

13.08.2003, 00:51

@Patrick
Bist du dir sicher? Ich verwende des öfteren

Quellcode

1
const int NULL = 0;

Hatte noch nie Probleme mit Zeigern. Habs aus "Die C++ Programmiersprache".

Meine "BIBEL" wiederlegt deine Aussage. 0 ist nämlich sogesehen kein Wert. Ich zitiere mal den Stroustrup:

Zitat


5.1.1 NULL
NULL (0) ist ein int, Durch die Standartkonventierungen kann 0 als Konstante für jeden intergralen, Gleitkomma-, Zeiger- und Elemetzeigertyp benutzt werden. Der Typ von NULL wird aus dem Contex ermittelt. NULL wird üblicherweiße (aber nicht notwendigerweiße) durch ein Bitmuster von NULLEN der passenden Größe repräsentiert.
Es wird kein Objekt mit der Adresse 0 angelegt. Entsprechend wird 0 als Zeigerliteral benutzt, um anzuzeigen, dass ein Zeiger nicht auf ein Objekt verweist.
In C war es populär ein Makro NULL zu definieren, um den NULL Zeiger zu repräsentieren. Durch die engere Typprüfung von C++ führt die Benutzung der einfachen 0 anstelle des NULL Markos zu weniger Problemen. Wenn Sie meinen NULL definieren zu müssen dann benutzen sie:

Quellcode

1
const int NULL = 0;

Der const-Qualifizierer verhindert die Redefinition von NULL und stellt sicher, dass NULL dort benutzt werden kann, wo eine Konstante benötigt wird.


Oft hab ich auch im code Anderer sowas hier gesehn:

Quellcode

1
2
3
4
float fZahl = 0.0f; // Mehr Schreibarbeit
fZahl = 0; // Dies geht nartürlich nur bei NULL ohne casting warnung.
fZahl = 1; // Gibt eine casting Warnung aus.
fZahl = 1.0f; // Müsste es richtig heißen.


Patrick kauf dir mal den Stroustrup falls du ihn noch nicht hast. Kommste wenn du wirklich sauber Cpp proggen willst nicht dran vorbei, der muss wissen wie man diese Sprache verwendet. ;)

Von meinen Deutsch Lehrer würdest du ne Note schlechter für's argumentieren kriegen weil seiner Meinung nach die Meinung anderer als Schwachsinnig dazustellen beleidigten wäre. War ein echt komischer Vogel. Aber Recht hat'er da! ;D

Ciao DarthB

9

13.08.2003, 00:54

Boah fühl ich mich jetzt gut mit meinem Stroustrup Zitat.
Ein Gespenst geht um in Europa...

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

10

13.08.2003, 00:59

Ja und wie...
Stroustrup gibt mir immer Recht... liegt wohl daran das ich ihm alles nachlabber. ;D
Wollte ja nur nicht das in diesem Forum ne Falschaussage stehen bleibt. Aber bei "NULLEN" macht mir keiner was vor, da kenn ich mich aus! ;D
Ist ziemlich langweilig wenn man Nachts nicht schlafen kann.

Werbeanzeige