steffanhalv Skrevet 17. november 2010 Del Skrevet 17. november 2010 (endret) Hvorfor fungerer ikke dette? Jeg prøver å gjøre om variabelen 'int en' fra 1 til 3 via en funksjon ved bruk av pointere. Er dette rette måten å gjøre det på? Jeg får access violation error i Visual Studio 10. Klarer ikke å finne ut av det, og må være ferdig i kveld... #include <stdio.h> void fn(int); int main(){ int en=1; int *pt; pt=&en; fn(*pt); printf("%d",en); getchar(); return 0;} void fn(int *to) { int test=2; int *pnt_test; pnt_test=&test; *to=*pnt_test; //<------ Her er feilen, er det riktig måte å endre variabelen en på? } Endret 17. november 2010 av steffanhalv Lenke til kommentar
Dinosauromann Skrevet 17. november 2010 Del Skrevet 17. november 2010 (endret) Burde fungere å forandre fn(*pt); til fn(pt); En bruker & for å hente adressen til en variabel, * for å hente verdien fra en peker. Siden pt er en peker, og funksjonen tar en peker, trenger du ikke gjøre noe mer med den. EDIT: Du må også endre void fn(int); til void fn(int*); slik at funksjonen er lik prototypen. Så at du skrev at variabelen skulle endres til 3 i teksta, mens du brukte 2 i koden, så vet ikke hvilken som er riktig, om det er 3 er det bare å endre 2 til 3 i koden. Det kan også forenkles slik: #include <stdio.h> void fn(int*); int main(){ int en=1; fn(&en); printf("%d",en); getchar(); return 0;} void fn(int *to) { *to = 2; } Endret 17. november 2010 av egebokk Lenke til kommentar
steffanhalv Skrevet 17. november 2010 Forfatter Del Skrevet 17. november 2010 Burde fungere å forandre fn(*pt); til fn(pt); En bruker & for å hente adressen til en variabel, * for å hente verdien fra en peker. Siden pt er en peker, og funksjonen tar en peker, trenger du ikke gjøre noe mer med den. EDIT: Du må også endre void fn(int); til void fn(int*); slik at funksjonen er lik prototypen. Så at du skrev at variabelen skulle endres til 3 i teksta, mens du brukte 2 i koden, så vet ikke hvilken som er riktig, om det er 3 er det bare å endre 2 til 3 i koden. Det kan også forenkles slik: #include <stdio.h> void fn(int*); int main(){ int en=1; fn(&en); printf("%d",en); getchar(); return 0;} void fn(int *to) { *to = 2; } Takk, forstår det litt bedre nå Men for å gjøre det vanskelig. Hvis jeg har en enkel array kan jeg ta to++; før *to= ...; for å endre i 'en[1]' hvis den hadde vært array. Men hva hvis det er en todimensjonal array slik som 'en[a]'? Hvordan fungerer dette? Lenke til kommentar
Nickless Skrevet 20. november 2010 Del Skrevet 20. november 2010 (endret) Takk, forstår det litt bedre nå Men for å gjøre det vanskelig. Hvis jeg har en enkel array kan jeg ta to++; før *to= ...; for å endre i 'en[1]' hvis den hadde vært array. Men hva hvis det er en todimensjonal array slik som 'en[a]'? Hvordan fungerer dette? Skjønner ikke helt spørsmålet ditt her? Men et todimensjonal-array fungerer på helt samme måte som et endimensjonalt-array, f.eks: int b[10][10]; int i; int j; for(i = 0; i < 10; i++){ for(j = 0; i < 10; j++){ b[i][j] = j; } } Endret 20. november 2010 av Nickless Lenke til kommentar
GeirGrusom Skrevet 22. november 2010 Del Skrevet 22. november 2010 Tror han tenker på dette: for(int i = 0; i < 10 * 10; i++) { b[i] = i; } Lenke til kommentar
LostOblivion Skrevet 25. november 2010 Del Skrevet 25. november 2010 int len = 2; for(int i = 0; i < len*4; i++) { b[i] = i; } Sett at man har en slik kode, er de fleste kompilatorer smarte nok til å ikke evaluere testen hver loop? 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å