Dead_Rabbit Skrevet 15. april 2004 Del Skrevet 15. april 2004 (endret) #include <iostream> #include <cstring> using namespace std; struct Node { char Navn[31]; Node* Nestepk; }; int main() { Node* Pk1 = new Node; strcpy(Pk1->Navn, "KARI"); Node* Pk2 = new Node; strcpy(Pk2->Navn, "OLA"); Pk2->Nestepk = NULL; //Disse skjønner jeg ikke helt poenget med Pk1->Nestepk = Pk2; // Jeg prøvde å kjøre programmet uten dem, og det funka. cout << Pk1->Navn << endl; cout << Pk2->Navn; Pk2 = 0; cin.get(); return 0; } Her har vi koden, og jeg trenger jo som vanlig litt hjelp . Som sagt så har jeg prøvd å kjøre programmet uten de to linjene som jeg har satt komentarer til, og det gir samme utskrift: KARI OLA Kan noen forklare hvorfor vi setter Pk1 til NULL og Pk2 til samme verdi(er det NULL Pk2 blir satt til da? Og i så fall, ville det ikke vært enklere å bare sette verdien til NULL isteden for å (for meg) gjøre koden mye vanskligere?) EDIT: En teit setning... Endret 20. april 2004 av zirener Lenke til kommentar
☀ ❄ Skrevet 15. april 2004 Del Skrevet 15. april 2004 En linked list (slik som det der er en forholdsvis simpel utgave av) inneholder en peker til neste (og evt. forrige) element i listen. Noe som peker til 0 (en "nullpeker") peker ikke til noe. Det betyr altså at ingen av dem har noe neste element -- de er begge det eneste elementet i listen(e). Bjarne Stroustrup anbefaler forresten å bruke 0 framfor NULL. Lenke til kommentar
Dead_Rabbit Skrevet 15. april 2004 Forfatter Del Skrevet 15. april 2004 [QUITE]Bjarne Stroustrup anbefaler forresten å bruke 0 framfor NULL. [/QUITE] Hvorfor det? Jeg har lest at det er bedre å bruke NULL(men tror vel Bjarne Stroustrup har mest rett) Lenke til kommentar
☀ ❄ Skrevet 15. april 2004 Del Skrevet 15. april 2004 Bjarne Stroustrup's C++ Style and Technique FAQ: Should I use NULL or 0? Eller les The Design and Evolution of C++ Lenke til kommentar
A_N_K Skrevet 15. april 2004 Del Skrevet 15. april 2004 Så er det de av oss som liker makroer >:] Vel, skal egentlig ikke si at det har gått så langt, men de kan være nyttige. Lenke til kommentar
søppel Skrevet 16. april 2004 Del Skrevet 16. april 2004 (endret) #include <iostream> using namespace std; struct Node { char const* data; Node* next; }; // struct Node void skrivUt(Node* node) { do { cout << node->data << endl; } while((node = node->next)); } // skrivUt int main() { Node* a = new Node; a->data = "a"; a->next = 0; cout << "Første:" << endl; skrivUt(a); Node* b = new Node; a->next = b; b->data = "b"; b->next = 0; cout << endl << "Andre:" << endl; skrivUt(a); Node* c = new Node; b->next = c; c->data = "c"; c->next = 0; cout << endl << "Tredje:" << endl; skrivUt(a); return(0); } // main() Blir kanskje lettere å skjønne når man ser det visuelt: http://nostdal.net/lars/forumstuff/1.png http://nostdal.net/lars/forumstuff/2.png http://nostdal.net/lars/forumstuff/3.png Hvert bilde viser programmet i et stoppet stadie .. den grønne pila viser hvor programmet er stoppet. (Eller hvor det kommer til å fortsette.) Som du sikkert kan gjette deg til, så pakker man slikt inn i klasser som tar seg av dette med å legge til nye elementer og passe på 0 og stuff. Endret 16. april 2004 av søppel Lenke til kommentar
Dead_Rabbit Skrevet 16. april 2004 Forfatter Del Skrevet 16. april 2004 Oi så ikke dette innlegget med en gang, men takk for linker og kodeeksempel Lenke til kommentar
johanlo Skrevet 16. april 2004 Del Skrevet 16. april 2004 Bjarne Stroustrup anbefaler forresten å bruke 0 framfor NULL. Hvorfor det? Jeg har lest at det er bedre å bruke NULL(men tror vel Bjarne Stroustrup har mest rett) Personlig så foretrekker jeg NULL, da det er mer oversiktlig. Og NULL er så vidt jeg vet mer "godtatt" en 0. Lenke til kommentar
☀ ❄ Skrevet 16. april 2004 Del Skrevet 16. april 2004 Jepp, veldig delte meninger om dette, og egentlig ingen sterke argumenter noen veier. Derfor jeg skreiv at Bjarne anbefalte, framfor at det var den riktige måten Lenke til kommentar
johanlo Skrevet 16. april 2004 Del Skrevet 16. april 2004 Jepp, veldig delte meninger om dette, og egentlig ingen sterke argumenter noen veier. Derfor jeg skreiv at Bjarne anbefalte, framfor at det var den riktige måten Du kan få et argument av meg: Flere andre programmeringsspråk har NULL som en del av språket, og det er derfor "naturlig" å bruke NULL i C++ også. Lenke til kommentar
søppel Skrevet 16. april 2004 Del Skrevet 16. april 2004 (endret) Et argument for 0: Man "venner seg til" at 0 er det samme som false i sammenheng med typer som int og char. Dette virker kanskje (?) mer naturlig for en som har vennt seg til dette. int i = 100; while(i--) {} Er NULL et tall? Er det false? Når det gjelder boolske verdier og sanninger er det for meg mer naturlig å snakke om 0 og 1 (for alt annet). Endret 16. april 2004 av søppel Lenke til kommentar
johanlo Skrevet 16. april 2004 Del Skrevet 16. april 2004 Er NULL et tall? Er det false? Når det gjelder boolske verdier og sanninger er det for meg mer naturlig å snakke om 1, og 0. Når det gjelder C++, så er NULL lik 0. Men i andre programmeringsspråk så betyr NULL udefinert og jeg liker derfor å bruke NULL i C/C++ også. I C++ så finnes typen BOOL (mulig at typen er definert av Visual C++), og jeg synes der er mer oversiktlig enn å bruke typer som int o.l. Lenke til kommentar
søppel Skrevet 16. april 2004 Del Skrevet 16. april 2004 og jeg synes den er mer oversiktlig enn å bruke typer som int o.l. *doh* Du misser totalt pointet. Ville du byttet ut int med bool her? #include <iostream> using namespace std; int main(int argc, char *argv[]) { int i = 10; do cout << "i: " << i << endl; while(i--); return(0); } // main() "Nedtellingsprogram lissom". Forresten, det er bool, ikke BOOL. Lenke til kommentar
johanlo Skrevet 16. april 2004 Del Skrevet 16. april 2004 og jeg synes den er mer oversiktlig enn å bruke typer som int o.l. *doh* Du misser totalt pointet. Ville du byttet ut int med bool her? #include <iostream> using namespace std; int main(int argc, char *argv[]) { int i = 10; do cout << "i: " << i << endl; while(i--); return(0); } // main() "Nedtellingsprogram lissom". Forresten, det er bool, ikke BOOL. Jeg bruker selvfølgelig BOOL (bool) hvis det bare er snakk om TRUE eller FALSE. Men uansett så er dette smak og behag. Lenke til kommentar
søppel Skrevet 16. april 2004 Del Skrevet 16. april 2004 (endret) Det gjør seff. jeg også .. men når det ikke er snakk om "bare" true eller false da? (bool, true og false ... ikke BOOL, TRUE og FALSE) Edit: Jeg tror vi snakker om-hverandre-hulte-ti-bulter egentlig. Endret 16. april 2004 av søppel Lenke til kommentar
A_N_K Skrevet 17. april 2004 Del Skrevet 17. april 2004 TRUE og FALSE er C-defines, for å emulere booleanske verdier. Selv bruker jeg NULL i forbindelse med NULL-pekere, jeg synes intensjonen bak kommer klarere fram. Men det blir selvfølgelig smak og behag. Lenke til kommentar
kjetil7 Skrevet 17. april 2004 Del Skrevet 17. april 2004 Når det gjelder C++, så er NULL lik 0. Men i andre programmeringsspråk så betyr NULL udefinert og jeg liker derfor å bruke NULL i C/C++ også. Dette er faktisk et bra argument mot å bruke NULL også! Siden NULL ikke er udefinert og faktisk bare betyr 0 i C++, så har det jo ikke samme betydning som i språk som behandler NULL som en egen udefinert type. Men når det er sagt så klarer jeg ikke helt å engasjere meg så veldig i NULL vs. 0 debattene. Er ganske likegyldig for meg hva folk bruker. Selv bruker jeg utelukkende 0, men det er en ren vanesak. Når det gjelder BOOL / bool derimot er saken en helt annen. Koder man C++ bruker man ganske enkelt bool og ikke BOOL! Lenke til kommentar
abcd423417984 Skrevet 17. april 2004 Del Skrevet 17. april 2004 BOOL er winapi's bool. Så enkelt er det. Forskjellen på det som ligger bak er litt annerledes, men den brukes på samme måte; BOOL noe = true; Lenke til kommentar
☀ ❄ Skrevet 17. april 2004 Del Skrevet 17. april 2004 Kort sagt helt enig med kjetil7. Lenke til kommentar
johanlo Skrevet 17. april 2004 Del Skrevet 17. april 2004 BOOL er winapi's bool. Så enkelt er det. Forskjellen på det som ligger bak er litt annerledes, men den brukes på samme måte; BOOL noe = true; Det forklarer saken... Jeg vet at standard C++ har bool, men jeg kikker for tiden på en USB-driver skrevet i Visual C++ (DLL) og header-filen bruker BOOL. Da var jeg ikke på bærtur likevel da jeg brukte BOOL. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå