В този урок ще научите за обхвата и живота на локалните и глобалните променливи. Също така ще научите за статичните и регистриращите се променливи.
Всяка променлива в програмирането на C има две свойства: тип и клас на съхранение.
Тип се отнася до типа данни на променлива. И класът за съхранение определя обхвата, видимостта и живота на променлива.
Има 4 вида клас за съхранение:
- автоматично
- външен
- статични
- регистрирам
Локална променлива
Променливите, декларирани вътре в блок, са автоматични или локални променливи. Локалните променливи съществуват само вътре в блока, в който са декларирани.
Да вземем пример.
#include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )
Когато стартирате горната програма, ще получите недеклариран идентификатор за грешка i. Това е така, защото i е деклариран вътре в for
цикличния блок. Извън блока той е недеклариран.
Да вземем друг пример.
int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() )
В горния пример n1 е локално към, main()
а n2 е локално към func()
.
Това означава, че нямате достъп до променливата n1 вътре, func()
тъй като тя съществува само вътре main()
. По същия начин не можете да получите достъп до променливата n2 вътре, main()
тъй като тя съществува само вътре func()
.
Глобална променлива
Променливите, които са декларирани извън всички функции, са известни като външни или глобални променливи. Те са достъпни от всяка функция в програмата.
Пример 1: Глобална променлива
#include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); )
Изход
n = 7
Да предположим, че глобална променлива е декларирана в file1
. Ако се опитате да използвате тази променлива в различен файл file2
, компилаторът ще се оплаче. За да се реши този проблем, ключовата дума extern
се използва в, за file2
да покаже, че външната променлива е декларирана в друг файл.
Регистър променлива
В register
ключова дума се използва за деклариране регистърни променливи. Регистрите на променливите трябваше да бъдат по-бързи от локалните променливи.
Съвременните компилатори обаче са много добри в оптимизацията на кода и има рядък шанс използването на регистърни променливи да направи вашата програма по-бърза.
Освен ако не работите по вградени системи, където знаете как да оптимизирате кода за даденото приложение, няма използване на регистърни променливи.
Статична променлива
Статичната променлива се декларира с помощта на static
ключовата дума. Например;
статичен int i;
Стойността на статична променлива се запазва до края на програмата.
Пример 2: Статична променлива
#include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); )
Изход
6 11
По време на първото извикване на функция стойността на c се инициализира на 1. Стойността му се увеличава с 5. Сега стойността на c е 6, което се отпечатва на екрана.
По време на второто извикване на функция c отново не се инициализира до 1. Това е така, защото c е статична променлива. Стойността c се увеличава с 5. Сега стойността му ще бъде 11, което се отпечатва на екрана.