C Academy · Урок

auto и локальная область видимости

Переменные уровня блока

Урок 1 из 413 шагов

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

Что такое область видимости

Область видимости — это участок кода, в котором имя доступно. В C переменные, объявленные внутри блока, доступны только в этом блоке.

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

Класс хранения auto

Локальные переменные по умолчанию имеют класс хранения auto. Это ключевое слово редко пишут, поскольку оно подразумевается для каждой переменной с блочной областью видимости.

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

Блочная область видимости

Пара фигурных скобок создаёт новый блок. Переменные внутри него перестают существовать после завершения блока.

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

Автоматическое время жизни

Переменная auto создаётся при входе в блок и уничтожается при выходе из него. Это и есть её время жизни.

#include <stdio.h>
int main(void) {
    for (int i = 0; i < 2; i++) {
        int fresh = i * 10;
        printf("fresh = %d\n", fresh);
    }
    return 0;
}

Затенение

Внутренняя переменная может затенять внешнюю переменную с тем же именем. Внутри своего блока приоритет имеет внутреннее имя.

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

Параметры функций являются локальными

Параметры тоже являются локальными переменными. Они существуют только во время выполнения функции.

#include <stdio.h>
int square(int n) {
    return n * n;
}
int main(void) {
    printf("%d\n", square(6));
    return 0;
}

Неинициализированные локальные переменные

Переменная auto автоматически не обнуляется. Чтение такой переменной до присваивания возвращает мусорное значение. Всегда выполняйте инициализацию.

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

Локальные переменные при каждом вызове

При каждом вызове функции создаётся собственная новая копия её локальных переменных.

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

Преимущества локальных переменных

Локальная область видимости ограничивает переменные и предотвращает случайное взаимодействие между частями программы.

#include <stdio.h>
int main(void) {
    int a = 3;
    {
        int b = 4;
        printf("a + b = %d\n", a + b);
    }
    return 0;
}

Вложенные блоки

Блоки могут быть вложенными. Внутренние блоки могут читать внешние переменные, но внешние блоки не могут читать внутренние.

#include <stdio.h>
int main(void) {
    int outer = 1;
    {
        int middle = 2;
        {
            int inner = 3;
            printf("%d\n", outer + middle + inner);
        }
    }
    return 0;
}

Область видимости и циклы

Переменная, объявленная в заголовке цикла for, доступна только в этом цикле.

#include <stdio.h>
int main(void) {
    int sum = 0;
    for (int i = 1; i <= 4; i++)
        sum += i;
    printf("sum = %d\n", sum);
    return 0;
}

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

Проверьте своё понимание auto и локальной области видимости.

Итоги: auto и локальная область видимости

Вы узнали, как ведут себя локальные переменные.

  • Переменные с блочной областью видимости по умолчанию имеют класс хранения auto
  • Их время жизни связано с блоком
  • Внутренние имена могут затенять внешние
  • Локальные переменные не инициализируются автоматически
  • При каждом вызове функции создаются новые локальные переменные
Можно начать бесплатно

Изучай C с ИИ-репетитором — бесплатно

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

Курсы
39
Уроки
144

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

Урок «auto и локальная область видимости» бесплатный?

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

Чему я научусь в уроке «auto и локальная область видимости»?

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

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

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

Сколько времени занимает урок «auto и локальная область видимости»?

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

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

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

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

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