Gå til innhold

Pointer i funksjon, hvorfor fungerer ikke?


Anbefalte innlegg

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 av steffanhalv
Lenke til kommentar
Videoannonse
Annonse

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 av egebokk
Lenke til kommentar

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

 

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 av Nickless
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...