Введение
В этом практическом занятии вы изучите переменные и типы в C++. Вы узнаете, как определять переменные и как использовать разные типы переменных.
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
В этом практическом занятии вы изучите переменные и типы в C++. Вы узнаете, как определять переменные и как использовать разные типы переменных.
Компьютерные программы обрабатывают (или обрабатывают) данные. Переменная используется для хранения части данных для обработки. Она называется переменной, потому что вы можете изменить хранимое значение.
Переменная - это именованное место хранения, которое хранит значение определенного типа данных. Другими словами, у переменной есть имя, тип и она хранит значение.
radius
, area
, age
, height
. Имя необходимо для уникального идентификации каждой переменной, чтобы присвоить ей значение и получить хранимое значение.int
, double
.Следующая диаграмма иллюстрирует два типа переменных: int
и double
. Переменная int
хранит целое число (целое число). Переменная double
хранит вещественное число.
Для именования переменной (или любого другого объекта, такого как функция или класс) требуется идентификатор. C++ налагает следующие правила на идентификаторы:
(a-z, A-Z)
, цифр (0-9)
и знака подчеркивания "_"
.+
, -
, *
, /
, '@'
и т.д.) не допускаются.int
, double
, if
, else
, for
).rose
не является Rose
и не является ROSE
.Конвенция именования переменных
Имя переменной - это существительное или фраза, состоящая из нескольких слов. Первое слово пишется строчными буквами, а остальные слова с заглавной буквы, без пробелов между словами. Например, thefontSize
, roomNumber
, xMax
и thisIsAVeryLongVariableName
, что известно как camel-case.
Рекомендации
numberOfStudents
или numStudents
.a
, b
, c
, d
, i
, j
, k
, i1
, j99
. Избегайте имен, состоящие из одной буквы, за исключением общих имен, таких как x
, y
, z
для координат, i
для индекса.row
для обозначения номера одной строки, а rows
- для обозначения нескольких строк.Прежде чем использовать переменную, ее имя и тип необходимо объявить с использованием одного из следующих синтаксисов:
Синтаксис | Пример |
---|---|
Объявить переменную заданного типа | int option; |
Объявить несколько переменных одного типа, разделенных запятыми | double sum, difference, product, quotient; |
Объявить переменную и присвоить ей начальное значение этого типа | int magicNumber = 88; |
Объявить несколько переменных с начальными значениями этого типа | double sum = 0.0, product = 1.0; |
Например
int mark1; // Объявить целочисленную переменную под названием mark1
mark1 = 76; // Использовать mark1
int mark2; // Объявить целочисленную переменную mark2
mark2 = mark1 + 10; // Использовать mark2 и mark1
double average; // Объявить вещественную переменную average
average = (mark1 + mark2) / 2.0; // Использовать average, mark1 и mark2
int mark1; // Ошибка: объявление дважды
mark2 = "Hello"; // Ошибка: присвоение значения другого типа
int number; // Объявлена, но не инициализирована
cout << number << endl; // Использована до инициализации, без предупреждения/ошибки, но с непредвиденным результатом.
Обратите внимание, что:
Константы - это неизменяемые переменные, объявляемые с использованием ключевого слова const
. Их значения не могут быть изменены во время выполнения программы. Также const
должен быть инициализирован при объявлении. Например:
const double PI = 3.1415926; // Необходимо инициализировать
Конвенция именования констант: Используйте прописные слова, соединенные знаком подчеркивания. Например, MIN_VALUE
.
Выражение - это комбинация операторов (например, '+', '-', '*', '/'
) и операндов (переменных или литеральных значений), которое можно вычислить, чтобы получить одно значение определенного типа. Например,
1 + 2 * 3 // дает int 7
int sum, number;
sum + number // вычисляется до целочисленного значения
double principal, interestRate;
principal * (1 + interestRate) // вычисляется до вещественного значения
Присваивающая инструкция:
Правая часть должна быть значением; а левая часть должна быть переменной (или адресом в памяти).
Синтаксис присваивающей инструкции:
Синтаксис | Пример |
---|---|
Присвоить литеральное значение (из правой части) переменной (из левой части) | number = 88; |
Вычислить выражение (из правой части) и присвоить результат переменной (из левой части) | sum = sum + number; |
Присваивающая инструкция должна интерпретироваться следующим образом: Выражение справа (правой частью) сначала вычисляется, чтобы получить результирующее значение (называемое rvalue или правым значением). Затем rvalue присваивается переменной слева (левой части) (или lvalue, которое представляет собой место, в котором можно хранить rvalue).
В таблице ниже показаны типичные размеры, минимальные и максимальные значения для примитивных типов. Обратите внимание, что размеры зависят от реализации.
Категория | Тип | Описание | Байты(Типичные) | Минимум(Типичный) | Максимум(Типичный) |
---|---|---|---|---|---|
Целые числа | int(или signed int) | Знаковое целое число (не менее 16 бит) | 4 (2) | -2147483648 | 2147483647 |
Целые числа | unsigned int | Беззнаковое целое число (не менее 16 бит) | 4 (2) | 0 | 4294967295 |
Целые числа | char | Символ (может быть знаковым или беззнаковым, в зависимости от реализации) | 1 | ||
Целые числа | signed char | Символ или знаковое маленькое целое число (гарантируется, что является знаковым) | 1 | -128 | 127 |
Целые числа | unsigned char | Символ или беззнаковое маленькое целое число (гарантируется, что является беззнаковым) | 1 | 0 | 255 |
Целые числа | signed short | Короткое знаковое целое число (не менее 16 бит) | 2 | -32768 | 32767 |
Целые числа | unsigned short | Короткое беззнаковое целое число (не менее 16 бит) | 2 | 0 | 65535 |
Целые числа | long | Длинное знаковое целое число (не менее 32 бит) | 4 (8) | -2147483648 | 2147483647 |
Целые числа | unsigned long | Длинное беззнаковое целое число (не менее 32 бит) | 4 (8) | 0 | то же, что и выше |
Целые числа | long long | Очень длинное знаковое целое число (не менее 64 бит) | 8 | -2e^63 | 2e^63-1 |
Целые числа | unsigned long long | Очень длинное беззнаковое целое число (не менее 64 бит) | 8 | 0 | 2e^64-1 |
Действительные числа | float | Число с плавающей точкой, ≈7 цифр | 4 | 3.4e^38 | 3.4e^(-38) |
Действительные числа | double | Число с плавающей точкой с двойной точностью, ≈15 цифр | 8 | 1.7e^308 | 1.7e^(-308) |
Действительные числа | long double | Число с плавающей точкой с длинной двойной точностью, ≈19 цифр | 12 (8) | ||
Булевы числа | bool | Булево значение true или false |
1 | false (0) | true (1 или не ноль) |
Широкие символы | wchar_tchar16_t,char32_t | Широкий (двубайтовый) символ | 2 (4) |
Оператор sizeof
C/C++ предоставляет унарный оператор sizeof
, чтобы получить размер операнда (в байтах). Следующая программа использует оператор sizeof
, чтобы вывести размер фундаментальных типов (сохраните следующий код в test.cpp
в /home/labex/Code
).
/*
* Print Size of Fundamental Types.
*/
#include <iostream>
using namespace std;
int main() {
cout << "sizeof(char) is " << sizeof(char) << " bytes " << endl;
cout << "sizeof(short) is " << sizeof(short) << " bytes " << endl;
cout << "sizeof(int) is " << sizeof(int) << " bytes " << endl;
cout << "sizeof(long) is " << sizeof(long) << " bytes " << endl;
cout << "sizeof(long long) is " << sizeof(long long) << " bytes " << endl;
cout << "sizeof(float) is " << sizeof(float) << " bytes " << endl;
cout << "sizeof(double) is " << sizeof(double) << " bytes " << endl;
cout << "sizeof(long double) is " << sizeof(long double) << " bytes " << endl;
cout << "sizeof(bool) is " << sizeof(bool) << " bytes " << endl;
return 0;
}
Вывод:
sizeof(char) is 1 bytes
sizeof(short) is 2 bytes
sizeof(int) is 4 bytes
sizeof(long) is 4 bytes
sizeof(long long) is 8 bytes
sizeof(float) is 4 bytes
sizeof(double) is 8 bytes
sizeof(long double) is 12 bytes
sizeof(bool) is 1 bytes
Инструкция typedef
Писать unsigned int
много раз может быть раздражающим. Инструкция typedef
может быть использована для создания нового имени для существующего типа. Например, вы можете создать новый тип, называемый "uint
", для "unsigned int
" следующим образом. Вы должны поместить typedef
сразу после #include
. Используйте typedef
с осторожностью, потому что это делает программу трудно читаемой и понятной.
typedef unsigned int uint;
Многие компиляторы C/C++ определяют тип, называемый size_t
, который является typedef
ом для unsigned int
.
typedef unsigned int size_t;
Целочисленные литералы
Целое число, такое как 123
и -456
, по умолчанию воспринимается как int
. Например,
int number = -123;
int sum = 4567;
Кроме целых чисел в десятичной системе по умолчанию, вы можете использовать префикс '0x'
для значения в шестнадцатеричной системе, и префикс '0b'
для двоичного значения (в некоторых компиляторах), например,
int number1 = 1234; // Десятичное
int number2 = 01234; // Восьмеричное 1234, Десятичное 2322
int number3 = 0x1abc; // Шестнадцатеричное 1ABC, Десятичное 15274
int number4 = 0b10001001; // Двоичное (возможно, не работает в некоторых компиляторах)
long
литерал идентифицируется суффиксом 'L'
или 'l'
(избегайте строчной буквы, которая может быть ошибочно прочитана как цифра один). long long int
идентифицируется суффиксом 'LL'
. Также вы можете использовать суффикс 'U'
для unsigned int
, 'UL'
для unsigned long
и 'ULL'
для unsigned long long int
. Например,
long number = 12345678L; // Суффикс 'L' для long
long sum = 123; // int 123 автоматически преобразуется в long 123L
long long bigNumber = 987654321LL; // Необходим суффикс 'LL' для long long int
Для short
литералов суффикс не требуется. Но вы можете использовать только целочисленные значения в допустимом диапазоне. Например,
short midSizeNumber = -12345;
Литералы с плавающей точкой
Число с десятичной точкой, такое как 55.66
и -33.44
, по умолчанию воспринимается как double
. Также вы можете выражать их в научной записи, например, 1.2e3
, -5.5E-6
, где e
или E
обозначает показатель степени 10. Вы можете предшествовать дробной части или показателю степени знаком плюс (+
) или минус (-
). Показатель степени должен быть целым числом.
Для float
литералов вы должны использовать суффикс 'f'
или 'F'
, например, -1.2345F
. Например,
float average = 55.66; // Ошибка! Правая часть - это double. Необходим суффикс 'f' для float.
float average = 55.66f;
Для long double
используйте суффикс 'L'
(или 'l'
).
Литералы bool
Есть только два bool
литерала, то есть true
и false
. Например,
bool done = true;
bool gameOver = false;
int i;
if (i == 9) { // Возвращает либо true, либо false
......
}
Литералы символов
Печатаемый char
литерал записывается в одинарных кавычках, например, 'z'
, '$'
и '9'
. В C++ символы представляются с использованием 8-битного ASCII-кода и могут быть обработаны как 8-битные знаковые целые числа в арифметических операциях. Другими словами, char
и 8-битный знаковый целый тип взаимозаменяемы. Также вы можете присвоить целое число в диапазоне [-128, 127]
переменной char
; и [0, 255]
для unsigned char
. Например,
char letter = 'a'; // То же, что и 97
char anotherLetter = 98; // То же, что и буква 'b'
cout << letter << endl; // Выводится 'a'
cout << anotherLetter << endl; // Выводится 'b', а не число
anotherLetter += 2; // 100 или 'd'
cout << anotherLetter << endl; // Выводится 'd'
cout << (int)anotherLetter << endl; // Выводится 100
Литералы строк
String
литерал состоит из нуля или более символов, окруженных двойными кавычками, например, "Hello, world!"
, "The sum is "
, ""
. Например,
String directionMsg = "Turn Right";
String greetingMsg = "Hello";
String statusMsg = ""; // Пустая строка
Пример (Литералы)
/* Testing Primitive Types */
#include <iostream>
using namespace std;
int main() {
char gender ='m'; // char заключается в одинарные кавычки
bool isMarried = true; // true(не ноль) или false(0)
unsigned short numChildren = 8; // [0, 255]
short yearOfBirth = 1945; // [-32767, 32768]
unsigned int salary = 88000; // [0, 4294967295]
double weight = 88.88; // С дробной частью
float gpa = 3.88f; // Необходим суффикс 'f' для float
// "cout <<" можно использовать для вывода значения любого типа
cout << "Gender is " << gender << endl;
cout << "Is married is " << isMarried << endl;
cout << "Number of children is " << numChildren << endl;
cout << "Year of birth is " << yearOfBirth << endl;
cout << "Salary is " << salary << endl;
cout << "Weight is " << weight << endl;
cout << "GPA is " << gpa << endl;
return 0;
}
Вывод:
Gender is m
Is married is 1 // true
Number of children is 8
Year of birth is 1945
Salary is 88000
Weight is 88.88
GPA is 3.88
В этом разделе мы рассмотрели несколько фундаментальных типов. Вы должны знать, как представлять переменную и как с ней работать. Не забывайте, какой размер занимает каждый тип в памяти и какой диапазон значений он может принимать.