0Pricing
C Academy · Lekcja

Zmienne const

Utworzy Pan/Pani wartości tylko do odczytu.

Zmienne const to bezpłatna lekcja C Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.

Znaczenie const

Słowo kluczowe const informuje kompilator, że wartość zmiennej nie może się zmienić po inicjalizacji.

Próba zmodyfikowania jej później zakończy się błędem kompilacji. Chroni to wartości, które powinny pozostać stałe.

const int MAX_USERS = 100;

Deklarowanie const

Wartość zmiennej const trzeba podać podczas jej deklarowania, ponieważ później nie można jej przypisać.

W tym przykładzie PI jest inicjalizowane raz i używane do odczytu jak każda zwykła zmienna.

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

Próba zmiany const

Przypisanie wartości do const po deklaracji jest błędem kompilacji.

Poniższy wiersz zostałby odrzucony przez kompilator — i właśnie takiej ochrony oczekujemy.

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

const ma określony typ

W przeciwieństwie do zwykłego makra zmienna const ma rzeczywisty typ, który kompilator sprawdza.

Zapewnia to bezpieczeństwo typów: kompilator wie, że RATE jest typu double, i ostrzega przed nieprawidłowym użyciem.

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

const ze wskaźnikami: dane

Kwalifikator const wskaźnika występuje w dwóch wariantach. const int *p oznacza, że danych, na które wskazuje p, nie można zmienić za jego pośrednictwem.

Nadal można zmienić adres przechowywany w p, aby wskazywał inne miejsce, ale nie można zapisywać za jego pomocą.

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

const ze wskaźnikami: wskaźnik

int *const p oznacza, że samego wskaźnika nie można przypisać ponownie, ale dane można zmieniać.

Deklaracje należy czytać od prawej do lewej: „p jest stałym wskaźnikiem do int”.

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

Ochrona argumentów funkcji

Oznaczenie parametru wskaźnikowego jako const gwarantuje, że funkcja nie zmodyfikuje danych wywołującego.

Dokumentuje to zamiar programisty i pozwala kompilatorowi wykrywać przypadkowe zapisy.

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

const w obliczeniach

Częstym zastosowaniem są stałe wartości konfiguracyjne, takie jak stawka podatku lub współczynnik przeliczeniowy.

Odczytywanie stałej sprawia, że wzór pozostaje przejrzysty, a wartość jest przechowywana w jednym miejscu.

#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 ma lokalizację w pamięci

Ponieważ const jest rzeczywistą zmienną, zajmuje miejsce w pamięci i można pobrać jej adres.

Różni się tym od makra #define, które jest wyłącznie podstawieniem tekstu i nie ma adresu.

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

Zakres i czas życia

const podlega tym samym regułom zakresu co zwykłe zmienne.

Zadeklarowana wewnątrz funkcji jest lokalna, a zadeklarowana poza nią — globalna. Taki zakres jest kolejną zaletą w porównaniu z makrami obejmującymi cały plik.

#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 a magiczne liczby

Zastąpienie bezpośrednio wpisanych liczb nazwanymi wartościami const usuwa „magiczne liczby”.

Jeśli wartość kiedykolwiek się zmieni, wystarczy edytować jedną linię zamiast przeszukiwać cały program.

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

Szybki test

Sprawdź znajomość działania const.

Podsumowanie

Zmienna const ma określony typ i przechowuje wartość tylko do odczytu, którą kompilator chroni przed zmianą.

Ma typ, zakres i adres, w przeciwieństwie do makra. W przypadku wskaźników const może dotyczyć danych, wskaźnika albo obu tych elementów. Następnie porównamy to rozwiązanie z #define.

Często zadawane pytania

Czy lekcja „Zmienne const” jest bezpłatna?

Tak — pełny tekst „Zmienne const” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zmienne const”?

Utworzy Pan/Pani wartości tylko do odczytu. Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C Academy?

Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Zmienne const”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?

Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Definiowanie enumów
  2. Wartości enumów i zakresy
  3. Zmienne const
  4. Stałe #define
← Powrót do C Academy