Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [C] NULL en int (https://forum.scholieren.com/showthread.php?t=552273)

deathz0rz 28-07-2003 12:37

[C] NULL en int
 
hier kwam ik niet uit, dus ff ee nsimpele vraag: kan je een int ook de waarde NULL geven?

Offtopic: btw, ik had eerst "[C] NULL" als topicname, maar dat pikt dit forum niet, worden lowercase... das nogal irri

IceManX 28-07-2003 17:49

Tip: probeer het uit. Compileert ie, dan kan het.

Kaboon 28-07-2003 20:31

Het is mogelijk.

McMotion 28-07-2003 21:23

als het goed is compileert hij wel jah maar wat wil je ermee bereiken? hij zet gewoon de waarde 0 erin dan, waarom tiep je niet gewoon int i = 0.. of wil je daarmee aangeven dat er geen waarde beschikbaar is zoals een NULL in een database.. dan werkt het niet omdat je de waarde 0 wil kunnen opslaan zonder dat het "geen waarde" betekent... dan moet je een pointer naar een int maken en die laten wijzen naar een int of NULL in de pointer zetten alsie leeg is... in dat geval is gewoon een boolean erbij om te kijken of hij vol is handiger :)

Chimera 29-07-2003 08:21

Als het goed is slikt je compiler "int i = NULL" niet, maar met een cast kan het wel. Zie het nut compleet niet maargoed, en bovendien is het semantisch compleet onjuist. In bijvoorbeeld Java hoef je dat niet te proberen.

deathz0rz 29-07-2003 11:25

ff kijken, wat wou ik ook al weer?

*zoek*

owja, ik heb een array van ints en die hoeft niet helemaal vol te zitten, en een element uit die array moet ook de waarde 0 kunnen hebben. dus wou ik de laatste+1 element de waarde NULL geven. maar dat werkt dus niet. ik doe het wel met -1.

Chimera 29-07-2003 11:40

Ah, op die manier. Nee, arrays van ints (en dat soort dingen) kunnen alleen integer waarden hebben. De 'NULL' in C is gewoon een macro voor 0, en ook in C++ zou 'null' toewijzen gewoon resulteren in een 0 in de array.

Dr HenDre 29-07-2003 11:58

NULL == 0 het woord NULL is in bepaalde headers gewoon gedefineerd als 0. En omdat je gewoon int i= 0 kan doen, kan je ook int i=NULL. Of zit ik er nu helemaal naast :p

deathz0rz 29-07-2003 12:21

Citaat:

Dr HenDre schreef op 29-07-2003 @ 12:58:
NULL == 0 het woord NULL is in bepaalde headers gewoon gedefineerd als 0. En omdat je gewoon int i= 0 kan doen, kan je ook int i=NULL. Of zit ik er nu helemaal naast :p
volgens mij is NULL de ASCII character 0. of zit ik er nu helemaal naast?

Chimera 29-07-2003 12:23

Citaat:

deathz0rz schreef op 29-07-2003 @ 13:21:
volgens mij is NULL de ASCII character 0. of zit ik er nu helemaal naast?
Nee, null is null, de compilerimplementatie staat daar los van. In het geval van C(++) wordt daar wel meestal de integer waarde 0 voor gebruikt, maar daar mag je niet van uitgaan.

McMotion 29-07-2003 13:54

Citaat:

Chimera schreef op 29-07-2003 @ 13:23:
Nee, null is null, de compilerimplementatie staat daar los van. In het geval van C(++) wordt daar wel meestal de integer waarde 0 voor gebruikt, maar daar mag je niet van uitgaan.
daar kan je toch rustig vanuit gaan? zou raar zijn als een cast van een null naar een bool true zou opleveren.. of als een null pointer naar een geldig stuk geheugen wijst :)

eddie 29-07-2003 14:27

Citaat:

McMotion schreef op 29-07-2003 @ 14:54:
daar kan je toch rustig vanuit gaan? zou raar zijn als een cast van een null naar een bool true zou opleveren.. of als een null pointer naar een geldig stuk geheugen wijst :)
Inderdaad, daarom mag je er ook niet van uit gaan dat een NULL een 0 (integer) is.

Je mag er niet vanuit gaan dat een NULL pointer naar een geldig stuk geheugen wijst.
Je mag er niet vanuit gaan dat NULL een true (boolean) is.
Je mag er niet vanuit gaan dat NULL een 0 (integer) is.
etc...

McMotion 29-07-2003 15:06

Citaat:

eddie schreef op 29-07-2003 @ 15:27:
Je mag er niet vanuit gaan dat een NULL pointer naar een geldig stuk geheugen wijst.
Je mag er niet vanuit gaan dat NULL een true (boolean) is.
Je mag er niet vanuit gaan dat NULL een 0 (integer) is.
etc...

je tiept het nu andersom.. wat ik bedoel... je mag er vanuit gaan dat bool(NULL) false teruggeeft en je mag er vanuit gaan dat *NULL per definitie ongeldig is dus dat een NULL pointer naar geheugenadres 0 wijst

eddie 29-07-2003 15:56

Citaat:

McMotion schreef op 29-07-2003 @ 16:06:
je tiept het nu andersom.. wat ik bedoel... je mag er vanuit gaan dat bool(NULL) false teruggeeft
Nu zeg jij het verkeerd :p
Een NULL-waarde is niks, onbekend, niet gedefinieerd.
NULL is alles en NULL is niets.

je mag er niet vanuit gaan dat bool(NULL) false teruggeeft

Citaat:

McMotion schreef op 29-07-2003 @ 16:06:
je
en je mag er vanuit gaan dat *NULL per definitie ongeldig is

Sterker nog, je moet (imho) er van uitgaan de *NULL ongeldig is. Je mag er niet mee rekenen/geen rekening mee houden.

Citaat:

McMotion schreef op 29-07-2003 @ 16:06:

dus dat een NULL pointer naar geheugenadres 0 wijst

En dit is (imho) de verkeerde opvatting. een NULL pointer kan overal naartoe wijzen (1, 18, 6553, etc); hij is onbekend.
Over het algemeen zal deze inderdaad naar 0 wijzen, maar dit is niet 'per definitie'

Chimera 29-07-2003 17:01

Citaat:

McMotion schreef op 29-07-2003 @ 16:06:
je tiept het nu andersom.. wat ik bedoel... je mag er vanuit gaan dat bool(NULL) false teruggeeft en je mag er vanuit gaan dat *NULL per definitie ongeldig is dus dat een NULL pointer naar geheugenadres 0 wijst
Nee, dat mag niet :)

Iemand kan een compiler/platform bedenken waarbij NULL naar geheugenadres -1 of 2^32 wijst, alles kan, aangezien dat juist een aspect is wat niet gedefinieerd is.

McMotion 29-07-2003 22:48

dus om te testen of een pointer ergens naar wijst bijvoorbeeld in een linked list schrijven jullie allebei if (pNextNode != null) in plaats van if (pNextNode)?? :confused:

ik heb weinig code gezien waar ze dat zo doen in ieder geval dus ik ben zeker niet de enige die dat doet... maargoed ik begrijp het nu ook wel van die abstractie alleen ik zie een null pointer altijd gewoon als een pointer zonder waarde, en niet als een pointer met een onbekende waarde (zoals in SQL) dus test ik er ook op

Chimera 30-07-2003 09:09

Citaat:

McMotion schreef op 29-07-2003 @ 23:48:
dus om te testen of een pointer ergens naar wijst bijvoorbeeld in een linked list schrijven jullie allebei if (pNextNode != null) in plaats van if (pNextNode)?? :confused:

Ja, die manier is gewoon fout.


Alle tijden zijn GMT +1. Het is nu 18:13.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.