02. november 2002 - 11:24Der er
10 kommentarer og 3 løsninger
pointer - hvorfor det?
hej Eksperter, jeg er forholdsvis ny inden for c. Jeg forstår ikke rigtig fordelen(e) ved pointere - altså hvorfor man pointer til en variable i stedet for bare give give variablen den samme værdi. b=25; a=b; //værdi en 25 a=&b; //adressen på b Kan nogle give ekspempler på hvornår det er smart og hvorfor? mvh kube
Måske er det ikke så anvendeligt på en lille variabel som i dit eksempel. Men forestil dig du har et stort objekt som fylder meget i hukommelsen (eksempelvis en stor bitmap). Hvis du så putter den i en anden variabel har du den ligepludselig 2 gange i hukommelsen og dermed kan man hurtigt løbe tør for RAM hvis man ikke passer på.
Nu kender jeg ikke så meget til C/C++ men i Delphi fylder en pointer 4 bytes hvor f.eks. en stor bitmap nemt kan fylde 2MB
Der er sikkert også andre fordele som jeg ikke lige kan komme på nu ;)
jeg kan godt se det når det gælder lagring af så store størelser - den havde jeg ikke tænkt på! for en int fylder jo ikke så meget...nogen andre der har fordele?
eks. hvis du vil vide hvor lang et char array er (\0 termineret) kunne du gøre sådan:
char test[] = "hello world"; //pointeren peger på første char i array'et.. int count = 0;
while(*text) //sålænge værdien af text ikke er \0 { count++; //tæl antal tegn op text++; //tæl pointeren én op - så er vi klar til næste char i array'et } printf("der var %i tegn i [%s]\n", count, test);
iøvrigt er der en del gode indlæg hist og pist her på eksperten der forklarer pointere og deres brug. prøv at søge på "pointer" i c/c++ kategorien.
Grunden til det er smart er at med pointere kan ændre værdien af en variabel i en funktion med en anden funktion.
Hvis du fx har variablen a i din main funktion og du med en anden funktion Change_a vil ændre værdien af a, kan det kun lade sig gøre hvis du i stedet for variablen a, sender a's adresse til Change_a
Det skyldes at variable i funktioner slettes når funktionen afsluttes. Det vil sige at hvis du inde i Change_a erklærer en variabel a, så er det ikke den samme som i din main funktion.
Pointere tvinger således funktioner til at bruge de rigtige variable i stedet for nogle midlertidige, der kun eksisterer så længe funktionerne kører
Det var kun den halve sandhed. Man kan nemlig bruge references i stedet for pointere til ovennævnte problem. References eksisterer dog så vidt jeg ved ikke i C, men kun i C++
tossen>> lige for at supplere, du kan også returnere en ny variabel fra din funktion. men så har du jo et problem hvis du gerne vil returnere flere værdier..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.