C Academy · Oppitunti

const-muuttujat

Tehkää arvoista vain luku -tilassa olevia.

Oppitunti 3/413 vaihetta

const-muuttujat on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Mitä const tarkoittaa

const-avainsana kertoo kääntäjälle, ettei muuttujan arvo saa muuttua alustamisen jälkeen.

Jos yritätte muuttaa sitä myöhemmin, käännös epäonnistuu. Näin suojataan arvot, joiden tulee pysyä muuttumattomina.

const int MAX_USERS = 100;

const-muuttujan määrittely

const-muuttujalle on annettava arvo määrittelyn yhteydessä, koska siihen ei voi sijoittaa arvoa myöhemmin.

Tässä PI alustetaan kerran, ja sitä käytetään lukemiseen kuten mitä tahansa tavallista muuttujaa.

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

const-arvon muuttamisen yrittäminen

const-muuttujalle sijoittaminen määrittelyn jälkeen aiheuttaa käännösvirheen.

Kääntäjä hylkäisi alla olevan rivin, mikä on juuri haluamamme suojaus.

const int LIMIT = 50;
/* LIMIT = 60; <- compile error */

const on tyypitetty

Toisin kuin paljaalla makrolla, const-muuttujalla on varsinainen tyyppi, jonka kääntäjä tarkistaa.

Tämä tarjoaa tyyppiturvallisuutta: kääntäjä tietää, että RATE on double-tyyppinen, ja varoittaa virheellisestä käytöstä.

#include <stdio.h>
int main(void) {
    const double RATE = 0.05;
    double total = 200.0 * RATE;
    printf("%.2f\n", total);
    return 0;
}

const osoittimien kanssa: data

Osoittimien const-määrittelyllä on kaksi muotoa. const int *p tarkoittaa, ettei osoittimen p kautta osoitettua dataa voi muuttaa.

Voitte silti siirtää p:n osoittamaan muualle, mutta ette voi kirjoittaa sen kautta.

int x = 5;
const int *p = &x;
/* *p = 9; <- error: data is const */

const osoittimien kanssa: osoitin

int *const p tarkoittaa, ettei itse osoittimelle voi sijoittaa uutta osoitetta, mutta dataa voi muuttaa.

Lukekaa määrittelyt oikealta vasemmalle: "p on int-tyyppiin osoittava const-osoitin".

int x = 5, y = 8;
int *const p = &x;
*p = 9;       /* allowed */
/* p = &y;    <- error: pointer is const */

Funktioargumenttien suojaaminen

Kun osoitinparametri merkitään const-määreellä, luvataan, ettei funktio muuta kutsujan tietoja.

Tämä dokumentoi tarkoituksen ja antaa kääntäjän havaita vahingossa tehdyt kirjoitukset.

#include <stdio.h>
void show(const char *msg) {
    printf("%s\n", msg);
}
int main(void) {
    show("hello");
    return 0;
}

const laskutoimituksessa

Yleinen käyttötapa on kiinteiden määritysarvojen, kuten veroprosentin tai muuntokertoimen, määrittäminen.

Vakion lukeminen pitää kaavan selkeänä ja arvon yhdessä paikassa.

#include <stdio.h>
int main(void) {
    const double KM_PER_MILE = 1.609;
    double miles = 10.0;
    printf("%.2f km\n", miles * KM_PER_MILE);
    return 0;
}

Const-muuttujalla on muistiosoite

Koska const on oikea muuttuja, se vie muistia ja sen osoitteen voi ottaa talteen.

Tämä poikkeaa #define-makrosta, joka on pelkkää tekstin korvaamista eikä jolla ole osoitetta.

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

Näkyvyysalue ja elinikä

const noudattaa samoja näkyvyysalueen sääntöjä kuin tavalliset muuttujat.

Funktioon määritettynä se on paikallinen; sen ulkopuolelle määritettynä se on globaali. Tämä näkyvyysalue on toinen etu koko tiedoston kattaviin makroihin verrattuna.

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

const ja taikaluvut

Kun koodin suorat lukuarvot korvataan nimetyillä const-arvoilla, "taikaluvut" poistuvat.

Jos arvo joskus muuttuu, muokkaatte yhtä riviä sen sijaan, että joutuisitte etsimään arvon koko ohjelmasta.

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

Pikatarkistus

Tarkistakaa, miten hyvin ymmärrätte const-käyttäytymisen.

Kertaus

const-muuttuja on tyypitetty, vain luku -arvo, jota kääntäjä suojaa muutoksilta.

Sillä on tyyppi, näkyvyysalue ja osoite toisin kuin makrolla. Osoittimien kanssa const voi koskea tietoja, osoitinta tai molempia. Seuraavaksi vertailemme tätä #define-määreeseen.

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 ”const-muuttujat” ilmainen?

Kyllä – oppitunnin ”const-muuttujat” 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 ”const-muuttujat”?

Tehkää arvoista vain luku -tilassa olevia. 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 3/4.

Kuinka kauan ”const-muuttujat”-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. Enumien määrittäminen
  2. Enum-arvot ja alueet
  3. const-muuttujat
  4. #define-vakiot
← Takaisin: C Academy