Dereferering og pointeraritmetik
Læs hukommelse gennem pointere, og gennemløb arrays med pointeraritmetik
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; // 42Skrive 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; // 100Piloperatoren
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; // 3Grundlæ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; // 30Gennemlø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; // 5Sammenligne 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.
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
- Rå pointere og adresseoperatoren
- Dereferering og pointeraritmetik
- nullptr og sikkerhed ved null-pointere
- Hvornår bruges pointere kontra referencer