C Academy · Oppitunti

register ja const

Vihjeet ja muuttumattomuus.

Oppitunti 4/413 vaihetta

register ja const on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 4 oppituntia.

register-vihje

register ehdottaa muuttujan säilyttämistä suorittimen rekisterissä nopeuden parantamiseksi. Se on vain vihje, jonka nykyiset kääntäjät yleensä ohittavat.

#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;
}

Sen osoitetta ei voi ottaa

Koska register-muuttuja ei välttämättä sijaitse muistissa, sen osoitetta ei voi ottaa operaattorilla &.

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

Miksi register-määritettä käytetään nykyään harvoin

Optimoivat kääntäjät sijoittavat usein käytetyt muuttujat jo rekistereihin. Avainsana on nykyään lähinnä historiallinen.

#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-määrite

const tekee muuttujasta vain luku -muuttujan alustamisen jälkeen. Sen muuttaminen aiheuttaa käännösvirheen.

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

Vakiot ilmaisevat tarkoituksen

const-määritteen käyttäminen kiinteille arvoille tekee koodista selkeämpää ja suojaa tahattomilta muutoksilta.

#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 osoittimien kanssa

const int *p tarkoittaa, ettei osoittimen p kautta osoitettua arvoa voi muuttaa. Osoitin itse voi edelleen osoittaa muualle.

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

Vakiomääräinen osoitin

int * const p tarkoittaa, ettei osoitin voi muuttua, mutta sen osoittamaa arvoa voi muuttaa.

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

const-funktion parametrit

Parametrin merkitseminen const-määritteellä lupaa, ettei funktio muuta sitä. Tämä auttaa kutsujaa ymmärtämään toiminnan.

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

Muuttumattomuus suunnitteluperiaatteena

Käyttäkää const-määritettä kaikille arvoille, joiden ei pitäisi muuttua. Se havaitsee virheet käännösaikana.

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

const-määrite ja globaalit muuttujat

Globaali const-muuttuja on turvallinen, jaettu vakio, joka on käytettävissä koko tiedostossa.

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

register ja const yhdessä

Voitte merkitä silmukkalaskurin molemmilla määritteillä, vaikka const tarkoittaa tässä, ettei silmukan runko saa muuttaa sitä.

#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;
}

Pikatarkistus

Testatkaa ymmärryksenne register- ja const-määritteistä.

Kertaus: register ja const

Opitte kaksi määritettä.

  • register vihjaa rekisteritallennuksesta, mutta yleensä ohitetaan
  • Register-muuttujan osoitetta ei voi ottaa
  • const tekee arvosta vain luettavan
  • Osoittimien const-määritteellä on kaksi muotoa: const-arvo ja const-osoitin
  • Käyttäkää const-määritettä runsaasti turvallisuuden lisäämiseksi
Aloita maksutta

Opi C tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
39
Oppitunnit
144

Usein kysytyt kysymykset

Onko oppitunti ”register ja const” ilmainen?

Kyllä – oppitunnin ”register ja const” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”register ja const”?

Vihjeet ja muuttumattomuus. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”register ja const”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?

Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. auto ja paikallinen näkyvyysalue
  2. static-muuttujat
  3. extern ja globaali näkyvyys
  4. register ja const
← Takaisin: C Academy