C++ Academy · Lektion

Dereferering og pointeraritmetik

Læs hukommelse gennem pointere, og gennemløb arrays med pointeraritmetik

Lektion 2 af 413 trin

Dereferering og pointeraritmetik er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Læse via en pointer

Den unære operator * læser den værdi, som pointeren peger på.

int x = 42;
int* p = &x;
std::cout << *p;   // 42

Skrive via en pointer

Du kan også bruge *p på venstre side af en tildeling til at skrive til målet.

*p = 100;
std::cout << x;   // 100

Piloperatoren

For pointere til structs eller klasser er p->member en kortform for (*p).member. Brug pilen — det er konventionen.

struct Point { int x, y; };
Point pt{3, 4};
Point* p = &pt;
std::cout << p->x;   // 3

Grundlæggende pointeraritmetik

Du kan lægge heltal til pointere eller trække dem fra. Resultatet flyttes i elementstore trin — ikke byte.

int a[5] = {10, 20, 30, 40, 50};
int* p = a;        // points to a[0]
p = p + 2;         // now points to a[2]
std::cout << *p;   // 30

Gennemløbe et array

Pointeraritmetik efterligner indeksering. a[i] og *(a + i) er identiske — og p[i] fungerer med enhver pointer.

int a[] = {1, 2, 3, 4};
int* p = a;
for (int i = 0; i < 4; ++i) {
    std::cout << *(p + i) << " ";
}

Afstanden mellem to pointere

Hvis du trækker to pointere fra hinanden i det samme array, får du elementafstanden — typen er std::ptrdiff_t.

int a[5];
int* first = a;
int* last  = a + 5;
std::ptrdiff_t len = last - first;  // 5

Sammenligne pointere

Du kan sammenligne pointere for lighed med == og != og sammenligne deres rækkefølge med <, men kun når de peger ind i det samme array.

Iterere med pointere

Idiomatisk iteration i C-stil bruger to pointere — begyndelse og slutning.

int a[] = {1, 2, 3, 4, 5};
for (int* p = a; p != a + 5; ++p) {
    std::cout << *p << " ";
}

Efter slutningen er tilladt

Du må beregne en pointer én position efter det sidste element ("end"-pointeren) — men det er udefineret at dereferere den.

Faldgruber ved pointeraritmetik

Almindelige fejl:

  • At gå uden for arrayets grænser
  • At blande pointertyper (int* + char*)
  • At glemme, at aritmetikken foregår i elementenheder, ikke byte

Foretræk iteratorer eller ranges

Moderne C++ foretrækker iteratorer og ranges-biblioteket frem for rå pointeraritmetik. Pointere er stadig vigtige til C-API'er og meget lavniveaukode.

Hurtigt tjek

Hvis p er en int*, der peger på starten af en int på 4 byte, hvad peger p + 1 så på?

Opsamling

*p læser eller skriver målet. p->member tilgår et struct-medlem. Pointeraritmetik flytter sig i elementstore trin. Brug det forsigtigt — iteratorer og ranges er som regel et sikrere valg i moderne kode.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Dereferering og pointeraritmetik” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Dereferering og pointeraritmetik”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Dereferering og pointeraritmetik”?

Læs hukommelse gennem pointere, og gennemløb arrays med pointeraritmetik Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Dereferering og pointeraritmetik”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Rå pointere og adresseoperatoren
  2. Dereferering og pointeraritmetik
  3. nullptr og sikkerhed ved null-pointere
  4. Hvornår bruges pointere kontra referencer
← Tilbage til C++ Academy