0Pricing
C Academy · Урок

register и const

Подсказки и неизменяемость

«register и const» — бесплатный урок C Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 4 уроков всего.

Подсказка register

register предлагает хранить переменную в регистре CPU для ускорения работы. Это лишь подсказка; современные компиляторы обычно её игнорируют.

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

Нельзя получить её адрес

Поскольку переменная register может не находиться в памяти, нельзя получить её адрес с помощью &.

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

Почему register сегодня используется редко

Оптимизирующие компиляторы и так размещают часто используемые переменные в регистрах. Сейчас это ключевое слово в основном представляет исторический интерес.

#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

const делает переменную доступной только для чтения после инициализации. Попытка изменить её приводит к ошибке компиляции.

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

Константы описывают намерение

Использование const для неизменяемых значений делает код понятнее и защищает от случайных изменений.

#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 с указателями

const int *p означает, что значение, на которое указывает указатель, нельзя изменить через p. Сам указатель при этом можно перенаправить.

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

Константный указатель

int * const p означает, что указатель нельзя изменить, но значение, на которое он указывает, изменять можно.

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

Параметры функций с const

Пометка параметра как const гарантирует, что функция не будет его изменять, и помогает вызывающему коду понять поведение функции.

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

Неизменяемость по замыслу

Предпочитайте const для любого значения, которое не должно изменяться. Это позволяет обнаруживать ошибки во время компиляции.

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

Сочетание const и глобальных переменных

Глобальная переменная const — это безопасная общая константа, доступная всему файлу.

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

register и const вместе

Счётчик цикла можно пометить обоими квалификаторами, хотя здесь const означает, что тело цикла не должно его изменять.

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

Быстрая проверка

Проверьте своё понимание register и const.

Итоги: register и const

Вы узнали о двух квалификаторах.

  • register предлагает хранение в регистре, но обычно игнорируется
  • Нельзя получить адрес переменной register
  • const делает значение доступным только для чтения
  • Константность указателя бывает двух видов: константное значение и константный указатель
  • Для безопасности широко используйте const

Часто задаваемые вопросы

Урок «register и const» бесплатный?

Да — полный текст урока «register и const» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 4 уроков всего.

Чему я научусь в уроке «register и const»?

Подсказки и неизменяемость Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C Academy?

Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «register и const»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C Academy?

Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. auto и локальная область видимости
  2. static-переменные
  3. extern и глобальные переменные
  4. register и const
← Назад к C Academy