C++ Змінні та типи: Int, Char, Float, Double, String & Bool
Змінні в C++
A C++ змінна надає нам можливість іменованого зберігання. Це дозволяє програмісту маніпулювати даними відповідно до потреби. Кожна змінна має тип C++. Тип змінної допомагає визначити розмір і структуру карти пам'яті змінної, діапазон значень, які можуть зберігатися в цій пам'яті, і набір операцій, які можуть бути застосовані до неї.
Основні типи змінних в C++
Ось основні типи C++ змінні:
Int:
Ціле число — це числовий літерал (пов’язаний із числами) без будь-якої дробової чи експоненціальної частини. приклад. 120, -90 і т.д.
Double:
Це значення з плаваючою комою подвійної точності. Приклад: 11.22, 2.345
Символ:
Символьний літерал створюється шляхом укладення одного символу в одинарні лапки. Наприклад: 'a', 'm', 'F', 'P', '}' тощо.
Поплавок:
Літерал із плаваючою комою — це числовий літерал, який має дробову або експонентну форму. Наприклад: 1.3, 2.6
Рядкові літерали:
Рядковий літерал — це послідовність символів, укладених у подвійні лапки. Наприклад: «Як справи?»
Bool:
Він містить логічне значення true або false.
Правила оголошення змінних в C++
Ось кілька загальних правил іменування змінної:
- A C++ Ім'я змінної може містити лише літери, цифри та підкреслення.
- A C++ Ім'я змінної не може починатися з числа.
- Імена змінних не повинні починатися з великої літери.
- Ім'я змінної, що використовується в C++ не може бути ключовим словом. Наприклад, int є ключовим словом, яке використовується для позначення цілих чисел.
- A C++ Ім'я змінної може починатися з підкреслення. Однак це не вважається хорошою практикою.
C++ Типи змінних даних
C++ визначає цілий набір примітивних типів
Команда анулювати type не має пов’язаних значень і може використовуватися лише в кількох випадках. Найчастіше це тип повернення функцій, які не повертають значення.
Команда арифметичні види включають символи, цілі числа, логічні значення та числа з плаваючою комою. Арифметичний тип, якщо далі розділити на 2 категорії
- Типи з плаваючою комою. Плаваючий тип (або плаваючий тип) представляє десяткові числа. Стандарт IEEE визначає мінімальну кількість значущих цифр. Більшість компіляторів зазвичай забезпечують більшу точність, ніж заданий мінімум. Як правило, числа з плаваючою речовиною представлені 32 бітами, подвійні 64 бітами, а довгі подвійні 96 або 128 бітами.
- Інтегральні типи (які включають символьні, цілі та логічні типи). The Boolean type має лише два типи значень: True або False. Є декілька бак типи, більшість з яких існує для підтримки інтернаціоналізації. Основним типом символів є char. char має такий самий розмір, як один машинний байт, тобто один байт.
Команда Інтегральні типи може бути підписаним або непідписаним.
Підписаний тип: вони представляють негативні чи позитивні числа (включаючи нуль). У типі зі знаком діапазон має бути рівномірно розподілений між значеннями +ve та -ve. Таким чином, 8-бітовий символ зі знаком буде містити значення від –127 до 127.
Беззнаковий тип: у беззнаковому типі всі значення >= 0. 8-бітовий беззнаковий char може містити від 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 initialization int a(5); int b{5};
Const Кваліфікатор в C++
Припустімо, що існує змінна buffsize, яка вказує кількість вхідних даних, які буде прийнято від користувача. Тут ми не хочемо змінювати значення buffsize протягом усієї програми. Ми хочемо визначити змінну, значення якої, як ми знаємо, не повинно змінюватися.
У такому випадку використовуйте ключове слово const
const int bufSize = 512; // input buffer size
Це визначає bufSize як константу. Будь-яка спроба призначити чи змінити bufSize дає помилку.
Тут ми не можемо змінити значення об’єкта const після того, як ми його створили, його потрібно обов’язково оголосити та ініціалізувати. Інакше компілятор видає помилку.
const int i = get_size(); // ok: initialized at run time const int j = 42; // ok: initialized at compile time const int k; // error: k is uninitialized const int i = 42; const int ci = i; // ok: the value in i is copied into ci
Область змінних в C++
Область — це діапазон програми, де змінна має значення. Переважно одне й те саме ім’я можна використовувати для позначення різних сутностей у різних сферах. Змінні видимі з точки, де вони оголошені, до кінця області, у якій з’являється їх оголошення.
#include <iostream> int main() { int sum = 0; // sum values from 1 through 10 inclusive for (int val = 1; val <= 10; ++val) sum += val; // equivalent to sum = sum + val cout << "Sum of 1 to 10 inclusive is "<< sum <<endl; return 0; }
Ця програма визначає 3 назви, а саме, головне, сума та значення. Він використовує назву простору імен std разом із двома іншими іменами з цього простору імен — cout і endl.
- Назва функції «main» визначається поза фігурними дужками. Ім'я функції main, як і більшість інших імен, визначених поза функцією, має глобальну область видимості. Це означає, що після оголошення імена, які знаходяться в глобальний розмах доступні протягом усієї програми.
- Змінна sum визначається в межах блоку, який є тілом основної функції. Доступ до нього можна отримати з його точки оголошення та в решті тіла основної функції. Однак не поза ним. Це означає, що змінна сума має область блоку.
- Змінна val визначена в області дії оператора for. Його можна легко використовувати в цьому операторі, але не в іншому місці в основній функції. Це має локальна сфера застосування.
Вкладена область
Область може містити інші області. Вміщена (або вкладена) область називається внутрішньою областю. Область, що містить, є зовнішньою областю.
#include <iostream> using 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 name int reused = 42; // reused has global scope int main() { int unique = 0; // unique has block scope // output #1: uses global reused; prints 42 0 cout << reused << " " << unique << endl; int reused = 0; // new, local object named reused hides global reused // output #2: uses local reused; prints 0 0 cout << reused << " " << unique << endl; // output #3: explicitly requests the global reused; prints 42 0 cout << ::reused << " " << unique << endl; return 0; }
Вихід №1 з’являється перед локальним визначенням reused. Таким чином, цей вихід
оператор — це той, який використовує повторно використане ім’я, визначене в глобальній області видимості. Цей оператор виводить
42 0
Вихід №2 відбувається після локального визначення повторного використання. Зараз це в масштабі. Таким чином, цей другий оператор виводу просто використовує локальний об’єкт з іменем reused, а не глобальний і виводить
0 0
Вихід №3 замінює правила визначення області за замовчуванням за допомогою оператор області видимості. Глобальна область не має імені. Таким чином, коли оператор області видимості (::) має порожню ліву частину. Він інтерпретує це як запит на отримання імені в правій частині глобальної області. Таким чином, вираз використовує глобальні повторно використані та виходи
42 0
Перетворення типу змінної
Змінна одного типу може бути перетворена в інший. Він відомий як «перетворення типу». Давайте подивимося правила конвертації різних C++ типи змінних:
Присвоєння не-bool змінній bool дає false, якщо значення дорівнює 0, і true в іншому випадку.
bool b = 42; // b is true
Призначення логіка одному з інших арифметичних типів дає 1, якщо логік істинний, і 0, якщо логік хибний.
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 true i = 0;
Якщо це значення = 0, то умова хибна; усі інші (ненульові) значення дають значення true. За тією ж концепцією, коли ми використовуємо логічний вираз в арифметичному виразі, його значення завжди перетворюється на 0 або 1. У результаті використання логічного значення в арифметичному виразі зазвичай майже напевно є неправильним.
Застереження: не змішуйте знакові та беззнакові типи
Вирази, які поєднують знак і без знака, можуть дати дивовижні та неправильні результати, якщо значення зі знаком від’ємне. Як обговорювалося вище, значення зі знаком автоматично перетворюються на беззнакові.
Наприклад, в арифметичному виразі типу
x* y
Якщо x дорівнює -1, а y дорівнює 1, а x і y є цілими, то значення, як і очікувалося, дорівнює -1.
Якщо x є цілим, а y беззнаковим, то значення цього виразу залежить від того, скільки бітів має ціле число на машині компіляції. На нашій машині цей вираз дає 4294967295.
Зареєструвати змінні
Доступ до змінних регістрів здійснюється швидше, ніж до змінних пам’яті. Отже, змінні, які часто використовуються в a C++ програму можна помістити в регістри за допомогою реєструвати ключове слово. Ключове слово register повідомляє компілятору зберігати задану змінну в регістрі. Компілятор вирішує, поміщати його в реєстр чи ні. Як правило, компілятори самі здійснюють різні оптимізації, які включають розміщення деяких змінних у реєстрі. Немає обмежень на кількість регістрових змінних у a C++ програма. Але компілятор може не зберігати змінну в регістрі. Це пояснюється тим, що пам'ять реєстрів дуже обмежена і найчастіше використовується ОС.
Визначати:
register int i;
Коментарі
Коментарі - це частини коду, які ігноруються компілятором. Це дозволяє програмісту робити нотатки у відповідних областях вихідного коду/програми. Коментарі надходять у вигляді блоків або окремих рядків. Коментарі програми є пояснювальними. Його можна включити в C++ код, який допомагає кожному, хто читає його вихідний код. Усі мови програмування допускають певну форму коментарів. C++ підтримує як однорядкові, так і багаторядкові коментарі.
- Однорядкові коментарі це ті, які починаються з // і продовжуються до кінця рядка. Якщо останнім символом у рядку коментаря є \, тоді коментар продовжуватиметься в наступному рядку.
- Багаторядкові коментарі це ті, які починаються на /* і закінчуються на */.
/* This is a comment */ /* C++ comments can also * span multiple lines */
Ескейп-послідовності
Деякі символи, наприклад символи повернення та контрольні символи, не мають видимого зображення. Такі символи відомі як недруковані символи. Інші символи (одинарні та подвійні лапки, знак питання та зворотна коса риска) мають особливе значення в багатьох мовах програмування.
Наші програми не можуть використовувати жоден із цих символів безпосередньо. Замість цього ми можемо використовувати керуючу послідовність для представлення такого символу. Екран-послідовність починається зі зворотної косої риски.
Команда C++ мова програмування визначає кілька escape-послідовностей:
Що він робить? | Характер |
---|---|
Новий рядок | \n |
Вертикальна вкладка | \v |
Зворотний слеш | \\ |
Повернення вагона | \r |
Горизонтальна вкладка | \t |
Повернення на одну позицію | \b |
Знак питання | \? |
Formfeed | \f |
Оповіщення (дзвінок) | \a |
Double цитувати | \ ” |
Одинарні лапки | \ ' |
Ми використовуємо керуючу послідовність, як якщо б це був один символ:
cout << '\n'; // prints a newline cout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newline
Ми також можемо записати узагальнені керуючі послідовності \x, за якими слідують одна або більше шістнадцяткових цифр. Або ми використовуємо \, після якого йде одна, або дві, або три вісімкові цифри. Узагальнена escape-послідовність представляє числове значення символу. Кілька прикладів (за умови набору символів 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 newline cout << '\115' << '\n'; // prints M followed by a newline
Підсумки
- A C++ змінна надає нам можливість іменованого зберігання.
- C++ типи змінних: int, double, бак, float, string, bool тощо.
- Вміщена (або вкладена) область називається внутрішньою областю, а вміщена область — зовнішньою.
- Змінна одного типу може бути перетворена в інший. Він відомий як «перетворення типу».
- Доступ до змінних регістрів здійснюється швидше, ніж до змінних пам’яті.
- Коментарі - це частини коду, які ігноруються компілятором.
- Деякі символи, наприклад символи повернення та контрольні символи, не мають видимого зображення.