Just nu i M3-nätverket
Gå till innehåll

++ in C ?


Micke_Johansson

Rekommendera Poster

Micke_Johansson

Hej,

 

jag undrar lite varför inte detta fungerar som det ska?

 

jag har:

 

int* nbr;

 

*nbr++ = 20;

 

det borde väl innebära samma sak som att skriva:

 

*nbr = *nbr + 20 ;

 

Eller?

 

men om jag kör en printf efter nbr++ = 20 så får jag resultatet 0 ?

 

Någon?

Länk till kommentar
Dela på andra webbplatser

Micke_Johansson

nbr += 20;

 

Hej jag menade mer, vad det innebär med att en pekare har ++ efter sig sedan =.

 

som detta:

 

*nbr++ = 20;

Länk till kommentar
Dela på andra webbplatser

++ efter pekare innebär att pekaren ökar ett steg, dvs minnesadressen. Det kan du använda när du har en array, exempelvis en sträng, som då tar dig till nästa värde/bokstav.

 

Men * framför en pekarvariabel innebär ju att det syftar på värdet som finns på adressen och inte adressen i sig, så det blir ju inte pekaren då... (edit: ah, låter vettigare som Anjuna skrev att det är pekaren som räknas upp och inte värdet, var ju 10+ år sen jag skrev C...)

 

= är tilldelning, så det som står till vänster om tecknet får värdet av det som står till höger.

 

Men se följande exempel av pekare++

 

#include <stdio.h>

 

int main(void)

{

int *nbr;

int test[2] = {10, 20};

nbr = &test;

nbr++;

printf("%d\n", *nbr);

return 0;

}

Länk till kommentar
Dela på andra webbplatser

Micke_Johansson

++ efter pekare innebär att pekaren ökar ett steg, dvs minnesadressen. Det kan du använda när du har en array, exempelvis en sträng, som då tar dig till nästa värde/bokstav.

 

Men * framför en pekarvariabel innebär ju att det syftar på värdet som finns på adressen och inte adressen i sig, så det blir ju inte pekaren då... (edit: ah, låter vettigare som Anjuna skrev att det är pekaren som räknas upp och inte värdet, var ju 10+ år sen jag skrev C...)

 

= är tilldelning, så det som står till vänster om tecknet får värdet av det som står till höger.

 

Men se följande exempel av pekare++

 

#include <stdio.h>

 

int main(void)

{

int *nbr;

int test[2] = {10, 20};

nbr = &test;

nbr++;

printf("%d\n", *nbr);

return 0;

}

 

Tackar tror jag förstår vad ni menar, tackar!

 

Men jag får inte rätt på utskriften i mitt exempel :/

 

*nbr++ = 20;

 

printf("0x%d\n", *nbr);

 

Får bara svaret 0 ?? Varför? Hur skriver jag ut en specifik minnesplats?

 

Menar säg att jag fyller en array eller en vektor kan man säga men värdena 20 i första slot som i detta fallet, hur skriver jag ut bara första slotet då?

 

Mvh

Micke

Länk till kommentar
Dela på andra webbplatser

int array[20];

 

Första värdet i arrayen är array[0]

 

Om du har deklarerat:

 

int *nbr;

 

så är nbr minnesadressen och *nbr värdet av det som finns på minnesadressen.

 

Om du har deklarerat en vanlig variabel:

 

int nbr;

 

så är &nbr dess minnesadress.

 

Observera att när du deklarerar: int *nbr; så får du en variabel med plats att lagra en minnesadress i. I det läget har du inget minnesutrymme att använda för något värde. För att kunna använda den till något vettigt måste du tilldela den minnesadressen för något du har deklarerat, exempelvis:

 

int *pekare;

int varde;

 

pekare = &varde;

Länk till kommentar
Dela på andra webbplatser

Micke_Johansson

int array[20];

 

Första värdet i arrayen är array[0]

 

Om du har deklarerat:

 

int *nbr;

 

så är nbr minnesadressen och *nbr värdet av det som finns på minnesadressen.

 

Om du har deklarerat en vanlig variabel:

 

int nbr;

 

så är &nbr dess minnesadress.

 

Observera att när du deklarerar: int *nbr; så får du en variabel med plats att lagra en minnesadress i. I det läget har du inget minnesutrymme att använda för något värde. För att kunna använda den till något vettigt måste du tilldela den minnesadressen för något du har deklarerat, exempelvis:

 

int *pekare;

int varde;

 

pekare = &varde;

 

Ah ok jag förstår det nu tack för svaret! :)

 

Bara det andra jag undrar också över, hur jag printf:ar en sådan här så jag vet att jag stoppar rätt saker på rätt slot i minnet?

 

/Micke

Länk till kommentar
Dela på andra webbplatser

Micke_Johansson

Ah ok jag förstår det nu tack för svaret! :)

 

Bara det andra jag undrar också över, hur jag printf:ar en sådan här så jag vet att jag stoppar rätt saker på rätt slot i minnet?

 

/Micke

 

Dum jag är kom på nu att det bara är att flytta pekaren tillbaks till rätt "slot" igen genom att t.ex. skriva printf("... %d \n", *(nbr -1));

 

:)Tackar alla för svaren!

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...