Променливи в C ++
Променливата на C ++ ни предоставя имена за съхранение. Това позволява на програмиста да манипулира данни според нуждите. Всяка променлива има тип в C ++. Типът на променливата помага да се определи размерът и оформлението на картата на паметта на променливата, диапазонът от стойности, които могат да се съхраняват в тази памет, и наборът от операции, които могат да бъдат приложени към нея.
В този урок за C ++ ще научите:
- Променливи в C ++
- Основни типове променливи в C ++
- Правила за деклариране на променливи в C ++
- C ++ променливи типове данни
- Име на променлива или идентификатори
- Const Qualifier в C ++
- Обхват на променливите в C ++
- Преобразуване на променлив тип
- Регистрирайте променливи
- Последователности за бягство
Основни типове променливи в C ++
Ето основните типове променливи на C ++:
Int:
Цялото число е числов литерал (свързан с числа) без дробна или експоненциална част. Пример. 120, -90 и т.н.
Двойна:
Това е стойност с плаваща запетая с двойна точност. Пример: 11.22, 2.345
Char:
Символният литерал се създава чрез заграждане на един знак в единични кавички. Например: 'a', 'm', 'F', 'P', '}' и т.н.
Поплавък:
Литералът с плаваща запетая е числов литерал, който има или дробна форма, или степенна форма. Например: 1.3, 2.6
Струнни литерали:
Низовият литерал е последователност от символи, затворени в двойни кавички. Например: „Как си?“
Bool:
Той съдържа булева стойност true или false.
Правила за деклариране на променливи в C ++
Ето някои често срещани правила за именуване на променлива:
- Името на променлива на C ++ може да има само азбуки, цифри и долна черта.
- Името на променлива C ++ не може да започва с число.
- Имената на променливите не трябва да започват с главни букви.
- Името на променлива, използвано в C ++, не може да бъде ключова дума. Например int е ключова дума, която се използва за означаване на цели числа.
- Името на променливата на C ++ може да започва с долна черта. Това обаче не се счита за добра практика.
C ++ променливи типове данни
C ++ дефинира цял набор от примитивни типове
Типът void няма свързани стойности и може да се използва само при няколко обстоятелства. Най-често е като тип връщане на функции, които не връщат стойност.
На аритметични типове включват символи, числа, булеви стойности, както и с плаваща запетая. Аритметичен тип, ако допълнително е разделен на 2 категории
- Типове с плаваща запетая . Плувката (или плаващ тип) представлява десетични числа. Стандартът IEEE определя минимален брой значими цифри. Повечето компилатори обикновено осигуряват по-голяма точност от посочения минимум. Обикновено плувките са представени в 32 бита, двойни в 64 бита и дълги двойни в 96 или 128 бита.
- Интегрални типове (които включват символни, цели числа и булеви типове). В Булев тип има само два вида ценности: Вярно или невярно. Има няколко типа char , повечето от които съществуват в подкрепа на интернационализацията. Най-основният тип символ е char. Char е със същия размер като един машинен байт, което означава един байт.
На цели типове могат да бъдат подписани или неподписани.
Подписан тип : Те представляват отрицателни или положителни числа (включително нула). В подписан тип диапазонът трябва да бъде равномерно разделен между стойностите + ve и -ve. По този начин, 8-битовият подписан знак ще съдържа стойности от -127 до 127.
Неподписан тип : В неподписан тип всички стойности са> = 0. 8-битов неподписан знак може да съдържа от 0 до 255 (и двете включително).
Име на променлива или идентификатори
Идентификаторите могат да бъдат съставени от някои букви, цифри и символа за подчертаване или някаква комбинация от тях. Не се налага ограничение на дължината на името.
Идентификаторите трябва
- започнете с буква или долна черта ('_').
- И са чувствителни към малки и големи букви; големите и малки букви са различни:
// дефинира четири различни int променливи
int guru99, gurU99, GuRu99, GURU99;
Езикът C ++ е запазил някои имена за използването му.
Има много приети конвенции за именуване на променливи в различни програмни езици. Следването на тези конвенции може да подобри четливостта на програмата.
- Идентификаторът трябва да дава поне някаква индикация за неговото значение.
- Имената на променливите обикновено са малки букви-guru99, а не Guru99 или GURU99.
- Класовете, които определяме, обикновено започват с главна буква.
- Идентификаторите, които съдържат множество думи, трябва визуално да различават всяка дума. Например guru99_website не guru99website.
Декларация и дефиниция на променливи C ++
Декларацията на променлива прави името известно на програмата в обхвата, в който е дефинирана. Пример:
int a=5;int b;char c='A';
int a,b;a=b=1000;
List initializationint a(5);int b{5};
Const Qualifier в C ++
Да предположим, че има променлива buffsize, която посочва броя на входовете, които трябва да бъдат взети от потребителя. Тук не искаме да променяме стойността на buffsize в цялата програма. Искаме да дефинираме променлива, чиято стойност знаем, че не трябва да се променя.
В такъв случай използвайте ключовата дума const
const int bufSize = 512; // input buffer size
Това определя bufSize като константа. Всеки опит за присвояване или промяна на bufSize дава грешка.
Тук не можем да променим стойността на const обект, след като го създадем, той трябва да бъде задължителен да бъде деклариран и инициализиран. В противен случай компилаторът извежда грешка.
const int i = get_size(); // ok: initialized at run timeconst int j = 42; // ok: initialized at compile timeconst int k; // error: k is uninitialized constint i = 42;const int ci = i; // ok: the value in i is copied into ci
Обхват на променливите в C ++
Обхватът е обхват на програма, където променлива има значение. Най-вече едно и също име може да се използва за означаване на различни обекти в различен обхват. Променливите са видими от точката, в която са декларирани, до края на обхвата, в който се появява тяхната декларация.
#includeint main(){int sum = 0;// sum values from 1 through 10 inclusivefor (int val = 1; val <= 10; ++val)sum += val; // equivalent to sum = sum + valcout << "Sum of 1 to 10 inclusive is "<< sum < Тази програма дефинира 3 имена, а именно, main, sum и val. Той използва името на пространството от имена std, заедно с две други имена от това пространство на имена-cout и endl.
- Името на функцията "main" е дефинирано извън къдравите скоби. Името на функцията, подобно на повечето други имена, дефинирани извън функция, има глобален обхват. Което означава, че веднъж декларирани имена, които са в глобален обхват, са достъпни в цялата програма.
- Променливата сума е дефинирана в обхвата на блока, който е тялото на основната функция. Той може да бъде достъпен от точката на деклариране и през останалото тяло на основната функция. Въпреки това, не извън него. Това означава, че променливата сума има обхват на блока .
- Променливата val е дефинирана в обхвата на "for statement". Той може лесно да се използва в това изявление, но не и другаде в основната функция. Той има локален обхват .
Вложен обхват
Обхватът може да съдържа други обхвати. Съдържащият се (или вложен) обхват се нарича вътрешен обхват. Съдържащият обхват е външният обхват.
#includeusing namespace std;// Program for illustration purposes only: It is bad style for a function// to use a global variable and also define a local variable with the same nameint reused = 42; // reused has global scopeint main(){int unique = 0; // unique has block scope// output #1: uses global reused; prints 42 0cout << reused << " " << unique << endl;int reused = 0; // new, local object named reused hides global reused// output #2: uses local reused; prints 0 0cout << reused << " " << unique << endl;// output #3: explicitly requests the global reused; prints 42 0cout << ::reused << " " << unique << endl;return 0;} Изход №1 се появява преди локалната дефиниция за повторно използване. По този начин, това изход
израз е този, който използва повторно използваното име, което е дефинирано в глобален обхват. Това изявление извежда
42 0
Изход №2 възниква след локалната дефиниция за повторно използване. Сега е в обхвата. Следователно този втори изходен оператор просто използва локалния обект, наречен повторно използван, а не глобален и извежда
0 0
Изход №3 заменя правилата за обхват по подразбиране, използвайки оператора на обхвата. Глобалният обхват няма име. По този начин, когато операторът на обхвата (: :) има празна лява страна. Той го интерпретира като заявка за извличане на името от дясната страна на глобалния обхват. По този начин изразът използва глобалното повторно използване и извежда
42 0
Преобразуване на променлив тип
Променлива от един тип може да бъде преобразувана в друга. Известно е като „Преобразуване на тип“. Нека да видим правилата за преобразуване на различни типове променливи C ++:
Присвояването на non-bool на bool променлива дава false, ако стойността е 0 и true в противен случай.
bool b = 42; // b is trueПрисвояването на bool към един от другите аритметични типове дава 1, ако bool е вярно и 0, ако bool е false.
bool b = true;int i = b; // i has value 1Присвояването на стойност с плаваща запетая към променлива от тип int дава стойността, която е съкратена. Стойността, която се съхранява, е частта преди десетичната запетая.
int i = 3.14; // i has value 3Присвояването на int стойност на променлива от тип float води до това, че дробната част става нула. Точността обикновено се губи, ако цялото число има повече бита, отколкото може да побере плаващата променлива.
Int i=3;double pi = i; // pi has value 3.0Ако се опитаме да присвоим стойност извън обхвата на променлива от неподписан тип, резултатът е остатъкът от стойността% (по модул)
Например, 8-битов неподписан тип char може да съдържа стойности от 0 до 255 включително. Присвояването на стойност извън този диапазон ще доведе до компилатора, който присвоява остатъка от тази стойност по модул 256. Следователно, по логиката по-горе, присвояването на -1 на 8-битов неподписан знак дава на този обект стойността 255.
unsigned char c = -1; // assuming 8-bit chars, c has value 255Ако се опитаме да присвоим стойност извън обхвата на обект от подписан тип, резултатът е непредсказуем. Той е недефиниран. Програмата може да изглежда, че работи отвън, или може да се срине или да създаде стойности за боклук.
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefinedКомпилаторът прилага същите тези преобразувания, когато използваме стойност от един тип, където се очаква стойност от друг тип.
int i = 42;if (i) // condition will evaluate as truei = 0;Ако тази стойност = 0, тогава условието е невярно; всички други (ненулеви) стойности дават true. Със същата концепция, когато използваме bool в аритметичен израз, стойността му винаги се преобразува в 0 или 1. В резултат на това използването на bool в аритметичен израз обикновено е почти сигурно неправилно.
Внимание: Не смесвайте подписани и неподписани типове
Изразите, които смесват подписани и неподписани, могат да дадат изненадващи и грешни резултати, когато подписаната стойност е отрицателна. Както беше обсъдено по-горе, подписаните стойности автоматично се преобразуват в неподписани.
Например в аритметичен израз като
x* yАко x е -1 и y е 1 и ако x и y са int, тогава очакваната стойност е -1.
Ако x е int и y са без знак, тогава стойността на този израз зависи от това колко бита има цяло число на компилиращата машина. На нашата машина този израз дава 4294967295.
Регистрирайте променливи
Достъпът до регистрите на променливите е по-бърз в сравнение с променливите на паметта. Така че променливите, които често се използват в програма C ++, могат да бъдат поставени в регистри, използвайки ключова дума register . Ключовата дума register казва на компилатора да съхранява дадената променлива в регистър. Изборът на компилатора е дали да го впише в регистър или не. Като цяло самите компилатори правят различни оптимизации, които включват поставяне на някои от променливите в регистъра. Няма ограничение за броя регистърни променливи в програма C ++. Но компилаторът може да не съхранява променливата в регистър. Това е така, защото регистърната памет е много ограничена и най-често се използва от операционната система.
За да определите:
register int i;Коментари
Коментарите са частите от кода, игнорирани от компилатора. Той позволява на програмиста да прави бележки в съответните области на изходния код / програма. Коментарите идват или в блокова форма, или в отделни редове. Коментарите на програмата са обяснителни изявления. Той може да бъде включен в кода на C ++, който помага на всеки, който чете изходния му код. Всички езици за програмиране позволяват някаква форма на коментари. C ++ поддържа както едноредови, така и многоредови коментари.
- Едноредови коментари са тези, които започват с // и продължават до края на реда. Ако последният знак в реда за коментар е \, тогава коментарът ще продължи в следващия ред.
- Многоредови коментари са тези, които започват с / * и завършват с * /.
/* This is a comment *//* C++ comments can also* span multiple lines*/Последователности за бягство
Някои знаци, като backspace и контролни знаци, нямат видимо изображение. Такива знаци са известни като непечатни знаци. Другите знаци (единични и двойни кавички, въпросителни и обратна наклонена черта) имат специално значение в много езици за програмиране.
Нашите програми не могат директно да използват нито един от тези знаци. Вместо това можем да използваме екранираща последователност, за да представим такъв char. Ескейп поредицата започва с обратна наклонена черта.
Езикът за програмиране C ++ дефинира няколко изходни последователности:
Какво прави?
Характер
Нова линия
\н
Вертикален раздел
\ v
Наклонена черта
\\
Връщане на каретата
\ r
Хоризонтален раздел
\т
Backspace
\ b
Въпросителен знак
\?
Formfeed
\ е
Сигнал (звънец)
\ а
Двойна кавичка
\ "
Единична оферта
\ '
Използваме екранираща последователност, сякаш е единичен знак:
cout << '\n'; // prints a newlinecout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newlineМожем също да напишем обобщени изходни последователности \ x, последвани от една или повече шестнадесетични цифри. Или използваме \, последвано от една, или две, или три осмични цифри. Обобщената екранираща последователност представлява числовата стойност на знака. Някои примери (ако приемем набора от символи Latin-1):
\7 (bell) \12 (newline) \40 (blank)\0 (null) \115 ('M') \x4d ('M')Можем да използваме предварително дефинирани изходни последователности, както използваме всеки друг символ.
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newlinecout << '\115' << '\n'; // prints M followed by a newlineОбобщение
- Променливата на C ++ ни предоставя имена за съхранение.
- Типове променливи C ++: int, double, char, float, string, bool и др.
- Съдържащият се (или вложен) обхват се нарича вътрешен обхват, а съдържащият обхват е външният обхват.
- Променлива от един тип може да бъде преобразувана в друга. Известно е като „Преобразуване на тип“.
- Достъпът до регистрите на променливите е по-бърз в сравнение с променливите на паметта.
- Коментарите са частите от кода, игнорирани от компилатора.
- Някои знаци, като backspace и контролни знаци, нямат видимо изображение.