Знаковни променљиви и непроменљиви подаци

Декларација знаковних променљивих

Као и код целобројног типа података, за знаковни тип важи да све променљиве које желиш да користиш у програму прво мораш декларисати. Декларација садржи тип и један или више идентификатора. Ако у декларацији има више идентификатора, онда идентификаторе одвајаш оператором ,.

Променљиве знаковног типа најчешће ћеш декларисати коришћењем кључне речи char.

Напиши програм у програмском језику C у којем су декларисане две знаковне променљиве t и v.

#include <stdio.h>

int main(void)
{
    char t;
    char v;
    return 0;
}

или

#include <stdio.h>

int main(void)
{
    char t, v;
    return 0;
}

Променљива типа char у меморији рачунара заузима један бајт. Пошто један бајт има осам бита, то значи да знаковна променљива заузима осам бита у меморији рачунара. Како програмски језик C за памћење карактера користи стандардни ASCII бинарни 7-битни кôд, значи да је један бит неупотребљен. Тај први, неупотребљен бит користи се за знак. Захваљујући том биту и знаковни подаци могу имати модификаторе signed и unsigned. У табели у прилогу наведене су све дозвољене комбинације модификатора знаковног типа.

Уколико желиш да провериш минималне и максималне вредности које може да има податак знаковног типа на твом рачунарском систему са C компајлером којег ти користиш, то можеш урадити извршавањем програма датог у прилогу.

Иницијализација знаковних променљивих

Као и код целобројног типа, иницијализацијом променљивих, променљивама се додељују почетне вредности. Иницијализација садржи тип, идентификатор, оператор доделе = и одговарајућу вредност, а такође можеш истовремено иницијализовати више променљивих.

Напиши програм у програмском језику C у којем су иницијализоване променљиве t, v, a и b са тренутним смеровима на које показују компаси Тамаре, Владе, Алисе и Боба. Тамарин компас тренутно показује на север N, Владин на запад W, Алисин на југ S и Бобов на инсток E.

#include <stdio.h>

int main(void)
{
    char t = 'N';
    char v = 'W';
    char a = 'S';
    char b = 'E';
    return 0;
}

или:

#include <stdio.h>

int main(void)
{
    char t = 'N', v = 'W', a = 'S', b = 'E';
    return 0;
}

Такође, као и код целобројног типа, у истој линији можеш комбиновати декларацију и иницијализацију.

Напиши програм у програмском језику C у којем су иницијализоване променљиве као у претходном примеру, а смерови на које показују компаси Милице и Ненада нису познати.

#include <stdio.h>

int main(void)
{
    char t = 'N', v = 'W', a = 'S', b = 'E', m, n;
    return 0;
}

Знаковни непроменљиви подаци

У претходној лекцији научио си како се у програмском језику C записују подаци знаковног типа, а у овој, како се декларишу и иницијализују знаковне променљиве. Као и код целобројног типа, константни знаковни подаци су подаци чија је вредност унапред задата у програму и не може се мењати током извршавања програма. Њихова вредност може бити задата исто као и вредност знаковне променљиве, а можеш их дефинисати помоћу кључне речи const или коришћењем препроцесорске директиве #define.

Када дефинишеш знаковни константни податак помоћу кључне речи const, тип може бити основни знаковни тип char са или без signed или unsigned модификатора.

Напиши програм у програмском језику C у којем ћеш користити прво и последње мало слово енглеског алфабета. Прво мало слово је увек a, а последње увек z.

#include <stdio.h>

int main(void)
{
    const char prvo_slovo = 'a', poslednje_slovo = 'z';
}

Подсети се да се константним подацима морају доделити вредности у тренутку дефинисања, односно да није могуће прво декларисати константни података, а касније му доделити вредност. Такође, дефинисаним константним подацима није могуће мењати вредност током извршавања програма.

Претходни задатак могао си решити помоћу програма у којем су дефинисане знаковне симболичке константе.

#include <stdio.h>
#define PRVO_SLOVO 'a'
#define POSLEDNJE_SLOVO 'z'

int main(void)
{

}

Иако су препроцесорским директивама дефинисане знаковне симболичке константе, оне ће бити смештене у меморијску локацију величине 4 бајта. То значи да се иницијализацијом знаковног константног податка помоћу кључне речи const заузима 1 бајт у меморији, док се дефиницијом симболичке знаковне константе заузима 4 бајта.

Дефинисану симболичку константу можеш да поништиш препроцесорском директивом #undef, а да ли је нека константа дефинисана или није, можеш да провериш препроцесорским директивама #if defined(), #else и #endif, исто као и у случају целобројних симболичких константи.