Skip to content

Latest commit

 

History

History
99 lines (64 loc) · 4.05 KB

File metadata and controls

99 lines (64 loc) · 4.05 KB

Променливи


Преди всичко е нужно да знаете, че в С както и в много други езици има променливи, които запазват стойности. Тези променливи представляват наименовано парче памет с определена големина. Големината на парчето памет зависи от типа на променливата, която сме обявили и понякога от архитектурата на компютъра.

Стойностите, които сме запазили в променливите се достъпват извиквайки името на променливата, която сме дефинирали.

int round = 42;
printf("Current round: %d\n", round);

Има няколко типа променливи

Локални

Локалните променливи присъстват или могат да бъдат използвани, извиквани, променяни в рамките на функцията или блок от код в който са дефинирани. Дефинирайки локална променлива във функция, след нейното изпълнение паметта се особождава и променливата не може да бъде достъпена или променена.

Да вземем пример с функция която трябва да преброим колко пъти е била извикана.

void call_me() {
    int called = 0;

    called++;
    printf("called %d times\n");
}

В отзи случай след като извикаме call_me всеки път ще получаваме случаен резултат, защото при всяко извикване на функцията променливната called ще има стойност 1.

Глобални

Глобалните променливи за разлика от локалните имат "по-дълъг живот". Те могат да бъдат използвани във всички функции. Промените по тях се запазват след извикването на функциите, които ги променят. С горният пример нещата се променят така:

int called = 0;

void call_me() {
    called++;
    printf("called %d times\n");
}

Статични

За да дефинираме променлива или функция като статична използваме ключовата дума static. Тя може да бъде използвана по няколко причини.

Ограничаване на видимост

Дефинирайки глобална статична променлива или функция, тя става видима само за текущият файл.

Запазване стойности между извикването на функции

Използвайки примера за броенето на колко пъти е извикана дадена функция чрез статична променлива имаме следната ситуация:

#include <stdio.h>

void call_me() {
    int local = 0;
    static int counter = 0;

    local++;
    counter++;

    printf("local = %d, counter = %d\n", local, counter);
}

int main() {
    call_me();
    call_me();
    call_me();
}

Получаваме:

local = 1, counter = 1
local = 1, counter = 2
local = 1, counter = 3

При декларация на масиви като аргументи на функция

Или в случай, че искаме да се подписугурим, че подаденият масив на функцията има поне 27 (в случая) елемента в себе си.

void initialize_gradebook(struct strudent_t students[static 27]) {
    // ...
}

Константи