C Academy · Lektion

register og const

Hints og uforanderlighed

Lektion 4 af 413 trin

register og const er en gratis C Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig 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.

Tipset register

register foreslår, at en variabel opbevares i et CPU-register for at øge hastigheden. Det er kun et tip; moderne compilere ignorerer det som regel.

#include <stdio.h>
int main(void) {
    register int i;
    int sum = 0;
    for (i = 0; i < 5; i++)
        sum += i;
    printf("sum = %d\n", sum);
    return 0;
}

Du kan ikke tage dens adresse

Da en register-variabel muligvis ikke ligger i hukommelsen, må du ikke tage dens adresse med &.

#include <stdio.h>
int main(void) {
    register int x = 10;
    printf("x = %d\n", x);
    return 0;
}

Hvorfor register sjældent bruges i dag

Optimerende compilere placerer allerede ofte benyttede variabler i registre. Nøgleordet er i dag mest historisk.

#include <stdio.h>
int main(void) {
    int product = 1;
    for (register int i = 1; i <= 4; i++)
        product *= i;
    printf("product = %d\n", product);
    return 0;
}

const-kvalifikatoren

const gør en variabel skrivebeskyttet efter initialisering. Hvis du forsøger at ændre den, opstår der en kompileringsfejl.

#include <stdio.h>
int main(void) {
    const int DAYS = 7;
    printf("DAYS = %d\n", DAYS);
    return 0;
}

Konstanter dokumenterer hensigten

Brug af const til faste værdier gør koden tydeligere og beskytter mod utilsigtede ændringer.

#include <stdio.h>
int main(void) {
    const double PI = 3.14159;
    double r = 2.0;
    printf("area = %.2f\n", PI * r * r);
    return 0;
}

const med pointere

const int *p betyder, at den værdi, der peges på, ikke kan ændres via p. Selve pointeren kan stadig flyttes.

#include <stdio.h>
int main(void) {
    int x = 5;
    const int *p = &x;
    printf("*p = %d\n", *p);
    return 0;
}

Konstant pointer

int * const p betyder, at pointeren ikke kan ændres, men at den værdi, den peger på, godt kan.

#include <stdio.h>
int main(void) {
    int x = 5;
    int * const p = &x;
    *p = 9;
    printf("x = %d\n", x);
    return 0;
}

const-funktionsparametre

Hvis en parameter markeres med const, lover det, at funktionen ikke ændrer den. Det hjælper kaldende kode med at gennemskue funktionens opførsel.

#include <stdio.h>
void show(const int n) {
    printf("n = %d\n", n);
}
int main(void) {
    show(42);
    return 0;
}

Uforanderlig efter design

Foretræk const for alle værdier, der ikke bør ændres. Det opdager fejl under kompileringen.

#include <stdio.h>
int main(void) {
    const int LIMIT = 100;
    int x = 90;
    if (x < LIMIT)
        printf("under limit\n");
    return 0;
}

Kombination af const og globale variabler

En global const-variabel er en sikker, delt konstant, der er tilgængelig i hele filen.

#include <stdio.h>
const int VERSION = 2;
int main(void) {
    printf("VERSION = %d\n", VERSION);
    return 0;
}

register og const sammen

Du kan endda markere en løkketæller på begge måder, selv om const her betyder, at løkkens krop ikke må ændre den.

#include <stdio.h>
int main(void) {
    int sum = 0;
    for (int i = 0; i < 3; i++) {
        const int doubled = i * 2;
        sum += doubled;
    }
    printf("sum = %d\n", sum);
    return 0;
}

Hurtigt tjek

Test din forståelse af register og const.

Opsummering: register og const

Du har lært om to kvalifikatorer.

  • register giver et tip om registerlagring, men ignoreres som regel
  • Du kan ikke tage adressen på en registervariabel
  • const gør en værdi skrivebeskyttet
  • const for pointere findes i to varianter: konstant værdi eller konstant pointer
  • Brug const rigeligt for at øge sikkerheden
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
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “register og const” gratis?

Ja — hele teksten til “register og const” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C Academy-kurset, skal du opgradere til CoddyKit PRO. C Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “register og const”?

Hints og uforanderlighed 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 4 af 4.

Hvor lang tid tager lektionen “register og const”?

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. auto og lokalt scope
  2. static-variabler
  3. extern og globale variabler
  4. register og const
← Tilbage til C Academy