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 — локальная установка не требуется.