const-muuttujat
Tehkää arvoista vain luku -tilassa olevia.
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.
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
- Enumien määrittäminen
- Enum-arvot ja alueet
- const-muuttujat
- #define-vakiot