Är det någon skillnad mellan NULL och 0?

Permalänk
Medlem

Är det någon skillnad mellan NULL och 0?

Är det någon skillnad mellan NULL och 0?

Permalänk
Medlem

Nej, NULL är bara ett annat ord för 0.
I C++ är NULL ofta definerat såhär,

#define NULL 0

EDIT: Kan vara anorlunda i andra språk än c/c++.

EDIT 2: Du kan altid prova med

if(0==NULL) cout << "Null är 0" << endl; else cout << "Null är inte 0" << endl;

/Viktor

Permalänk
Medlem

Okej, tack.

Permalänk

Jag trodde att NULL var det logiska namnet för en tom mängd. Alltså A = 0 != "", jag fick mig en tankeställare när jag såg att NULL var definerat som just 0. Någon som vet hur det är i andra språk?

Visa signatur

System.out.print(madness ? this.is.SPARTA : "");

Permalänk

NULL är definierat som 0. I C++ brukar man använda NULL när man refererar till en pekare, eftersom man inte använder några andra siffror än 0 när man jobbar med pekare. Då använder man NULL för att kolla om pekaren pekar på något.

int *pNum = new int; int Num = Something(); if ( pNum == NULL || Num == 0 ) // Gör något

När man jobbar med t.ex. int så jämför man med 0. Man kan dock göra hur man vill, men det är såhär jag gör, och jag tror de flesta gör så.

Permalänk
Medlem

I C är NULL en pekare. Ur stddef.h:

#undef NULL #if defined(__cplusplus) #define NULL 0 #else #define NULL ((void *)0) #endif

Permalänk
Medlem

I C/C++ osv.:
#define NULL 0
NULL är ett begrepp för att tala om att t.ex. en pekare inte pekar på något. Vi kan altså definiera att pekaren inte är giltig. Det är viktigt att sätta pekare till NULL i vissa kompilatorer eftersom ett olämpligt anrop till free kan orsaka coredumpar.

Edit:
Att använda NULL i samband med något annat än pekare är begreppsförvirring.

I databas:
Null är inte lika med någonting
Null är inte skilt från någonting
Null är inte större än någonting
Null är inte mindre än någonting
Jämförelseoperationer ger alltid FALSE i retur
Null är definierat som odefinierat.

Visa signatur

/ Assar

Permalänk
Medlem

I Java så är null ingenting. Om man försöker göra någonting på ett objekt som är null så kastas en NullPointerException.

Det går att kolla om ett objekt != null.

Visa signatur

Fractal Design Define R3 | Asus Z170 Pro Gaming | Intel Core i7 6700K | 32 GB Corsair Vengaeance LPX DDR4 2666 MHz | Asus Radeon RX 580 | EVGA SuperNova 850 G2 | Kingston A400 480 GB SSD | 2 x WD Caviar Black 1TB | 2 x Crucial MX500 500 GB SSD

Permalänk
Medlem

null != 0
Om en variabel har värdet 0, så är den inte null.
Är en variabel null, har den inget värde alls. Den kanske inte ens är definierad.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Dred
null != 0
Om en variabel har värdet 0, så är den inte null.
Är en variabel null, har den inget värde alls. Den kanske inte ens är definierad.

En variabel kan inte ha "inget värde". Att man i en del skriptspråk (och SQL för den delen) gör en distriktion mellan null och 0 ändrar inte på det faktum att null i väldigt många språk är synonymt med 0 eller som i fallet med C, 0 typecastat till en void-pekare.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Assar
I C/C++ osv.:
#define NULL 0
NULL är ett begrepp för att tala om att t.ex. en pekare inte pekar på något. Vi kan altså definiera att pekaren inte är giltig. Det är viktigt att sätta pekare till NULL i vissa kompilatorer eftersom ett olämpligt anrop till free kan orsaka coredumpar.

Förutom att i C är det som Karlsson skrev: #define NULL ((void*)0), C++ är NULL däremot 0.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Kennel
En variabel kan inte ha "inget värde". Att man i en del skriptspråk (och SQL för den delen) gör en distriktion mellan null och 0 ändrar inte på det faktum att null i väldigt många språk är synonymt med 0 eller som i fallet med C, 0 typecastat till en void-pekare.

Nämn ett till språk där 0==NULL.

Permalänk
Medlem

Jag tror att eftersom vi använder oss av 0 för att representera NULL så måste vi acceptera att en del anser att NULL defenieras som 0.
Faktum är dock att ingen alltid kan förvänta sig att NULL representerar 0.
NULL är och blir ett värde som man använder för att verkligen tala om att denna "pekare" inte pekar någonstans.
Tyvärr tror en del att det är ok att avsluta teckearrayer med NULL. Resultatet fungerar, men den som gör denna lilla habrovinkel har inte bara sprungit över ån efter vatten. Han/hon har dessutom talat om att han/hon inte vet vad NULL egentligen avser.

Kennel:
I databaser har man faktiskt utvecklat detta med NULL så att 0 kan vara ett värde. Att inte kunna ge variabler värdet NULL i vanliga programmeringsspråk är en begränsning som man behöver hitta lösningar på ibland. En klass som dels innehåller ett värde men också kan anta NULL är ett exempel som fungerar i C.

Dåligt exempel:
Jag matar in värden i ett formulär och skall bl.a ange hur gammal min morbrors systers farbror var när han föddes. Eftersom jag tappade bort mig ungefär halvvägs så kan jag inte svara på detta. Skall jag då svara 0 eller hur skall jag tala om för systemet att jag inte vet. Jag saknar verkligen NULL ibland.

Visa signatur

/ Assar

Permalänk

I just SQL får man ju skilja mellan 0 som är ett värde (int) och NULL som är "i väntan på ett värde", alltså inget värde. Du kan ju inte printa ut värdet NULL som just ett värde.

Krånglig förklaring men. Ja.

Visa signatur

www.uu.se - some kind of university | www.hirr.org.uk - ain't no mountain high enough | www.bajenfans.se

Permalänk
Medlem

Att inte ha ett värde har också ett värde

Visa signatur

/ Assar

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av denka
Nämn ett till språk där 0==NULL.

Ok, jag tog not i lite i överkant där, men rent generellt borde alla språk som saknar en formell definition av null bli tvugna att göra det. Smalltalk t.ex. definierar null (eller nil som det kallas där) som en referens till ett singletonobjekt som representerar avsaknaden av ett objekt. Det är ju dock så att de två troligtvis största programspråken i världen definierar det till 0 (eller (void*)0) och det tycker jag väger rätt tungt. Detta betyder inte att jag tycker det är bra. Jag saknar möjligheten till flervärdeslogik i C/C++ mer eller mindre varenda gång jag jobbar med det.

Citat:

Ursprungligen inskrivet av Assar
Kennel:
I databaser har man faktiskt utvecklat detta med NULL så att 0 kan vara ett värde.

"Att man i en del skriptspråk (och SQL för den delen) gör en distriktion mellan null och 0 ..."

Permalänk
Medlem

i alla språks urfader (asm) är NULL=0h

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Hedersmedlem

Screw ASM, mikroprogrammering är det som gäller
Delight, det beror på vilken miljö du programmerar ASM i. I radassemblern i TUTOR-systemet vi använder i skolan finns det inga flashiga saker som NULL.

Visa signatur

The variable 'brain' is declared but never used

Permalänk
Medlem

Jag tackar för svaren.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Delight
i alla språks urfader (asm) är NULL=0h

Att NULL är 0x00 innebär inte att 0x00 = NULL

Visa signatur

/ Assar

Permalänk

hmmm... jaja... i vbScript är NULL iaf ingenting, medans 0 å andra sidan är just 0...

EDIT: men om man anropar något och skall kolla tex längden på en text är och den är 0 lång så är det ju ett NULL värde... men om man kollar en integer och den har 0 som värde är ju längden 1 så den har alltså inte värdet NULL...

Visa signatur

"If you can't explain it simply, you don't understand it well enough"

Vad du än ställer för fråga så är svaret alltid detsamma: www.google.com

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Ghost_Overdoze
Jag trodde att NULL var det logiska namnet för en tom mängd. Alltså A = 0 != "", jag fick mig en tankeställare när jag såg att NULL var definerat som just 0. Någon som vet hur det är i andra språk?

En sträng som har innehållet "" är NULL, eftersom C-strängar är NULL-terminerade; innehåller nulltecknet på slutet; ASCII-värde 0; 0.

Permalänk
Medlem

I matten så är NULL och 0 olika saker, och det borde väl vara det avgörande vad programmeringsspråken än säger...

NULL = NULL

0=0
0=1-1
0=100*0

0 är uppenbarligen någonting eftersom det är det samma som något vi vet är någoting (ett uttryck,t ex -1+1)... NULL är ingenting.

Visa signatur

Läs en bok för fan...

Permalänk
Avstängd

Nej,

1-1 är däremot =0
lika mycket som
100*0=0

inte tvärtom.

Visa signatur

Eller inte.

Permalänk
Medlem

i t.ex. ASP är det skillnad

Visa signatur

Last FM - Slappis.Net - Petterssons.Org - Årets idiot 2004

Botten upp, resten i håret!

Bahnhof 100/100/Mb/s villafiber

Permalänk
Medlem

Alltså: I vissa situationer är NULL=0 och i andra är NULL!=0. I andra situationer finns inte NULL och ibland är NULL=0 men 0!=NULL.

Tadaa! Detta kanske borde stå i FAQ:en

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Medlem

Visual Basic..

0 = 0 'Ett nummer, Nolla
Null = "" 'Ingenting

Visa signatur

tack o bock

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Timpa
Visual Basic..

0 = 0 'Ett nummer, Nolla
Null = "" 'Ingenting

exakt.
noll = "ett tal" (även om det är noll)
men
null = ingenting alls. inte ens ett nummer

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Medlem

Att NULL definieras som 0 i C++ är lite smått knasigt. Det borde vara ((void *) 0) där också. Man borde göra skillnad på 0 (const int) och en pekare av den binära värdet 0. Direkt tilldelning av värdet 0 till pekare borde inte vara korrekt, utan generera en varning.

Däremot håller jag inte med de som verkar tycka att man ska ha något "inget värde" även för variabler av heltalstyp. För pekare är det vettigt och användbart, och värdet 0 är ändå ledigt och pekar åt helvete så det är fritt att använda. Däremot finns det inget obrukbart värde bland heltalen man fritt och generellt kan välja att representera "inget värde".

Permalänk
Medlem

Likadant i delphi;

0=0;
nil=nada;

Alla vet vi ju att null bara är en kassare variant av nil.

Visa signatur