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

++ in C ?

Rekommendera Poster

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?

Redigerad av Micke_Johansson

Dela detta inlägg


Länk till inlägg
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;

}

Redigerad av Thomas Tydal

Dela detta inlägg


Länk till inlägg
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;

}

 

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

Dela detta inlägg


Länk till inlägg
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;

Dela detta inlägg


Länk till inlägg
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;

 

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

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...