
- •6) Сколько места в памяти занимает тип double?
- •7) Сколько места в памяти занимает тип int?
- •9)Сколько места в памяти занимает тип char?
- •17. Как производится подключение файлов описаний с помощью директив препроцессора?
- •18. Как производится объявление констант в директивах препроцессора?
- •23. Что такое «область видимости переменной»?
С++
Какие базовые типы данных имеются в языке С++? В языке С++ определено шесть стандартных простых типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов, а также массивов и указателей (указатель не является самостоятельным типом, он всегда связан с каким-либо другим конкретным типом), программист может вводить описание собственных простых или структурированных типов. К структурированным типам относятся перечисления, функции, структуры, объединения и классы.
Простые типы данных
Простые типы делятся на целочисленные типы и типы с плавающей точкой. Для описания стандартных типов определены следующие ключевые слова:
int (целый);
char (символьный);
wchar_t (расширенный символьный);
bool (логический);
float (вещественный);
double (вещественный с двойной точностью).
Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:
short (короткий);
long (длинный);
signed (со знаком);
unsigned (без знака).
Целый тип (int)
Размер типа int стандартом ANSI не определяется. Он зависит от реализации. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного — 4 байта.
Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта. Спецификатор long означает, что целая величина будет занимать 4 байта.
Внутреннее представление величины целого типа — целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый (0 — положительное число, 1 — отрицательное). Спецификатор unsigned позволяет представлять только положительные числа. Диапазоны значений величин целого типа с различными спецификаторами для IBM PC-совместимых компьютеров приведены в таблице 1.4.
По умолчанию все целочисленные типы считаются знаковыми.
Константам, встречающимся в программе, приписывается тип в соответствии с их видом. Программист может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u(unsigned). Например, константа 32L имеет тип long и занимает 4 байта.
ПРИМЕЧАНИЕ
Типы short int, long int, signed int и unsigned int можно сокращать до short, long, signed и unsigned соответственно.
Символьный тип (char)
Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера. Как правило, это 1 байт.
Тип char, как и другие целые типы, может быть со знаком или без знака.
В величинах со знаком можно хранить значения в диапазоне от –128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.
Расширенный символьный тип (wchar_t)
Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short.
Логический тип (bool)
Величины логического типа могут принимать только значения true и false. Внутренняя форма представления значения false — 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.
Типы с плавающей точкой (float, double и longdouble)
Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и longdouble.
Внутреннее представление вещественного числа состоит из мантиссы и порядка. Длина мантиссы определяет точность числа, а длина порядка — его диапазон.
Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long). Например, константа 2E+6Lбудет иметь тип long double.
|
|
|
Тип |
Диапазон значений |
Размер (байт) |
bool |
true и false |
1 |
signed char |
–128 .. 127 |
1 |
unsigned char |
0 .. 255 |
1 |
signed short int |
–32 768 .. 32 767 |
2 |
unsigned short int |
0 .. 65 535 |
2 |
signed long int |
–2 147 483 648 .. 2 147 483 647 |
4 |
unsigned long int |
0 .. 4 294 967 295 |
4 |
float |
3.4e–38 .. 3.4e+38 |
4 |
double |
1.7e–308 .. 1.7e+308 |
8 |
long double |
3.4e–4932 .. 3.4e+4932 |
10 |
Как производится объявление переменных в языке С++?
Объявление переменной задаёт имя и атрибуты переменной. Атрибутами переменной могут быть тип, количество элементов (для массивов), спецификация класса памяти, а также инициализатор. Инициализатор – это константа соответствующего типа, задающая значение, которое присваивается переменной при создании.
Объявление переменной имеет следующий синтаксис:
[<спецификация класса памяти>] <тип> <имя> [= <инициализатор>]
[,<имя> [= <инициализатор>] ...];
Примеры объявления переменных
|
|
int x; |
// Объявление переменной целого типа без инициализатора |
double y = exp(1); |
// Переменная вещественного типа инициализируется числом e. // exp(x) – функция, вычисляющая ex. |
int a, b = 0; |
// Объявление двух переменных целого типа. Переменная b инициализируется значением 0. |
В языке С++ нет ограничений на количество символов в имени. Однако некоторые части реализации (в частности, компоновщик) недоступны автору компилятора, и они иногда накладывают такие ограничения.
Если вы попытаетесь использовать переменную, которую не объявили, ваша программа не будет скомпилирована, и вы получите сообщение об ошибке. В C++, все ключевые слова языка, все функции и все переменные чувствительны к регистру.
3) Как производится объявление указателей в языке С++?
Указатель – это переменная, в которой записан адрес ячейки памяти компьютера
•для размещения данных в свободных областях памяти и доступа к ним;
•для доступа к переменным и функциям классов;
•для передачи параметров в функции по ссылке.
Указатель – переменная, значением которой является адрес ячейки памяти. То есть указатель ссылается на блок данных из области памяти, причём на самое его начало. Указатель может ссылаться на переменную или функцию. Для этого нужно знать адрес переменной или функции. Так вот, чтобы узнать адрес конкретной переменной в С++ существует унарная операция взятия адреса &. Такая операция извлекает адрес объявленных переменных, для того, чтобы его присвоить указателю.
Указатели используются для передачи по ссылке данных, что намного ускоряет процесс обработки этих данных (в том случае, если объём данных большой), так как их не надо копировать, как при передаче по значению, то есть, используя имя переменной. В основном указатели используются для организации динамического распределения памяти, например при объявлении массива, не надо будет его ограничивать в размере. Ведь программист заранее не может знать, какого размера нужен массив тому или иному пользователю, в таком случае используется динамическое выделение памяти под массив. Любой указатель необходимо объявить перед использованием, как и любую переменную.
//объявление указателя
/*тип данных*/ * /*имя указателя*/;
Принцип объявления указателей такой же, как и принцип объявления переменных. Отличие заключается только в том, что перед именем ставится символ звёздочки *. Визуально указатели отличаются от переменных только одним символом. При объявлении указателей компилятор выделяет несколько байт памяти, в зависимости от типа данных отводимых для хранения некоторой информации в памяти. Чтобы получить значение, записанное в некоторой области, на которое ссылается указатель нужно воспользоваться операцией разыменования указателя *. Необходимо поставить звёздочку перед именем и получим доступ к значению указателя
4) Как производится объявление одномерных массивов в языке С++?
Массивы представляют собой коллекции данных одного типа, сохраненные в памяти компьютера. Каждая единица данных называется элементом массива.
Чтобы объявить массив, нужно указать его тип, имя и размер. Размер задается числом, взятым в квадратные скобки, и указывает, сколько элементов можно сохранить в данном массиве, например:
long LongArray[25];
В этом примере объявляется массив под именем LongArray, который может содержать 25 элементов типа long int.
Обнаружив подобную запись, компилятор резервирует в памяти компьютера место, чтобы сохранить 25 элементов указанного типа. Поскольку для сохранения одного значения типа long int требуется четыре байта памяти, то для заданного массива компилятор выделит цельную область памяти размером 100 байт (рис. 12.1).
Элементы
Адресация элементов массива определяется по сдвигу относительно адреса первого элемента, сохраненного в имени массива. Первый элемент массива имеет нулевой сдвиг. Таким образом, к первому элементу массива можно обратиться следующим…
Инициализацию массива базового типа (например, int или char) можно проводить одновременно с его объявлением. Для этого за выражением объявления массива нужно установить знак равенства (=) и в фигурных скобках список значений элементов массива, разделенных запятыми. Например:
int IntegerArгау[5] = {10, 20, 30. 40, 50};
В этом примере объявляется массив целых чисел IntegerArray и элементу IntegerArray[0] присваивается значение 10, элементу IntegerArray [1 ] — 20 и т.д.
Если вы опустите установку размера массива, то компилятор автоматически вычислит размер массива по списку значений элементов. Поэтому справедливой является следующая запись:
int IntegerArray [] = {10. 20. 30. 40. 50}:
5) Как производится объявление многомерных массивов в языке С++?
До этого момента мы рассматривали одномерные массивы, которыми не всегда можно ограничиться. Допустим, необходимо обработать некоторые данные из таблицы. В таблице есть две характеристики: количество строк и количество столбцов. Также и в двумерном массиве, кроме количества элементов массива, есть такие характеристики как, количество строк и количество столбцов двумерного массива. То есть, визуально, двумерный массив — это обычная таблица, со строками и столбцами. Фактически двумерный массив — это одномерный массив одномерных массивов. Структура двумерного массива, с именем a, размером m на n показана ниже (см. Рисунок 4).
Рисунок 4 — Массивы в С++
где, m - количество строк двумерного массива; n - количество столбцов двумерного массива; m * n - количество элементов массива.
1 2 |
// синтаксис объявления двумерного массива /*тип данных*/ /*имя массива*/[/*количество строк*/][/*количество столбцов*/]; |
В объявлении двумерного массива, также как и в объявлении одномерного массива, первым делом, нужно указать:
тип данных;
имя массива.
После чего, в первых квадратных скобочках указывается количество строк двумерного массива, во вторых квадратных скобочках — количество столбцов двумерного массива. Двумерный массив визуально отличается от одномерного второй парой квадратных скобочек. Рассмотрим пример объявления двумерного массива. Допустим нам необходимо объявить двумерный массив, с количеством элементов, равным 15. В таком случае двумерный массив может иметь три строки и пять столбцов или пять строк и три столбца.
1 2 |
// пример объявление двумерного массива: int a[5][3]; |
a - имя целочисленного массива
число в первых квадратных скобках указывает количество строк двумерного массива, в данном случае их 5;
число во вторых квадратных скобках указывает количество столбцов двумерного массива, в данном случае их 3.
1 2 |
// инициализация двумерного массива: int a[5][3] = { {4, 7, 8}, {9, 66, -1}, {5, -5, 0}, {3, -3, 30}, {1, 1, 1} }; |
В данном массиве 5 строк, 3 столбца. после знака присвоить ставятся общие фигурные скобочки, внутри которых ставится столько пар фигурных скобочек, сколько должно быть строк в двумерном массиве, причём эти скобочки разделяются запятыми. В каждой паре фигурных скобочек записывать через запятую элементы двумерного массива. Во всех фигурных скобочках количество элементов должно совпадать. Так как в массиве пять строк, то и внутренних пар скобочек тоже пять. Во внутренних скобочках записаны по три элемента, так как количество столбцов — три
6) Сколько места в памяти занимает тип double?
8 байт 2,2е-308-1,8е308 (sec25)
7) Сколько места в памяти занимает тип int?
unsigned short int |
2 байт |
0-65 535 |
short int |
2 байт |
-32 768-32 767 |
unsigned long int |
4 байт |
|
8) Сколько места в памяти занимает тип long?
4 байт -2 147 483 648 - 2 147 483 647
9)Сколько места в памяти занимает тип char?
байт 256 значений символов
10) Как записываются однострочные комментарии в языке C++?
Однострочный комментарий отмечается специальным символом в начале две косые черты
//- однострочный комментарий ,продолжается до конца строки. Обычно допускается вложение однострочных комментариев в другие, как одно- так и многострочные комментарии. Способы записи можно чередовать, с точки зрения семантики они одинаковы.
11) Как записываются многострочные комментарии в языке C++?
Многострочный комментарий. может иметь любую длину Такой комментарий начинается с символов /* и заканчивается символами */.
Некоторые языки позволяют вложение многострочных комментариев, другие — нет.
12)Как записываются литеральные константы в языке С++?
Литералы используются в тексте программы для обозначения числовых значений, строк, символов или логических констант. Другими словами литерал представляет собой постоянное значение, у которого нет имени.
Когда в программе встречается некоторое число, например 1, то это число называется литералом, или литеральной константой. Константой, потому что мы не можем изменить его значение, и литералом, потому что его значение фигурирует в тексте программы. Литерал является не адресуемой величиной: хотя реально он, конечно, хранится в памяти машины, нет никакого способа узнать его адрес. Каждый литерал имеет определенный тип. Так, 0 имеет тип int, 3.14159 – тип double.
По умолчанию все целые литералы имеют тип signed int. Можно явно определить целый литерал как имеющий тип long, приписав в конце числа букву L (используется как прописная L, так и строчная l)
Буква U (или u) в конце определяет литерал как unsigned int, а две буквы – UL или LU – как тип unsigned long.
Слова true и false являются литералами типа bool.
Представимые литеральные символьные константы записываются как символы в одинарных кавычках. Например:
'a' '2' ',' ' ' (пробел)
Специальные символы (табуляция, возврат каретки) записываются как escape-последовательности.
Определены следующие такие последовательности (они начинаются с символа обратной косой черты):
новая строка \n
горизонтальная табуляция \t
вертикальная табуляция \v
прогон листа \f
обратная косая черта \\
вопрос \?
одиночная кавычка \'
двойная кавычка \"
Символьный литерал может иметь префикс L (например, L'a'), что означает специальный тип wchar_t – двухбайтовый символьный тип, который применяется для хранения символов национальных алфавитов, если они не могут быть представлены обычным типом char, как, например, китайские или японские буквы.
13) Как записываются строковые константы в языке С++?
Строковые литералы используются для представления текстовых строк. Это строка символов, заключенная в кавычки. Например, «Город Симферополь» или «Результаты вычислений».
Ключевое слово null является литералом, представляющим пустую ссылку, которая не ссылается ни на один объект.
Строковый литерал – строка символов, заключенная в двойные кавычки. Такой литерал может занимать и несколько строк, в этом случае в конце строки ставится обратная косая черта. Специальные символы могут быть представлены своими escape-последовательностями. Вот примеры строковых литералов:
"" (Пустая строка)
"a"
"\nCC\toptions\tfile.[cC]\n"
"a multi-line \
string literal signals its \
continuation with a backslash"
Фактически строковый литерал представляет собой массив символьных констант, где по соглашению языков С и С++ последним элементом всегда является специальный символ с кодом 0 (\0).
Литерал 'A' задает единственный символ А, а строковый литерал "А" – массив из двух элементов: 'А' и \0 (пустого символа).
Раз существует тип wchar_t, существуют и литералы этого типа, обозначаемые, как и в случае с отдельными символами, префиксом L:
L"a wide string literal"
Строковый литерал типа wchar_t – это массив символов того же типа, завершенный нулем.
Если в тесте программы идут подряд два или несколько строковых литералов (типа char или wchar_t), компилятор соединяет их в одну строку.
Строковые константы можно конкатенировать ("склеивать”) во время компиляции; например, запись двух строк "Здравствуй," " мир!" эквивалентна записи одной следующей строки: "Здравствуй, мир!" Указанное свойство позволяет разбивать длинные строки на части и располагать эти части на отдельных строчках.
Функция strlen(s) вычисляет длину строки s без учета завершающего ее символа '\0' . Ниже приводится наша версия этой функции:
/* strlen: возвращает длину строки s */
int strlen(char s[])
{ int i = 0; while (s[i]!= '\0') ++i; return i;}
Функция strlen и некоторые другие, применяемые к строкам, описаны в стандартном заголовочном файле <string.h>.
Как записываются шестнадцатеричные константы в языке С++?
Когда в программе встречается некоторое число, например 1, то это число называется литералом, или литеральной константой. Константой, потому что мы не можем изменить его значение, и литералом, потому что его значение фигурирует в тексте программы. Литерал является неадресуемой величиной: хотя реально он, конечно, хранится в памяти машины, нет никакого способа узнать его адрес. Каждый литерал имеет определенный тип.
Литералы целых типов можно записать в десятичном, восьмеричном и шестнадцатеричном виде. Вот как выглядит число 20, представленное десятичным, восьмеричным и шестнадцатеричным литералами:
20 // десятичный
024 // восьмеричный
0х14 // шестнадцатеричный
Если литерал начинается с 0, он трактуется как восьмеричный, если с 0х или 0Х, то, как шестнадцатеричный (причем запись числа ведется в восьмеричной и в шестнадцатеричной системах соответственно). Привычная запись рассматривается как десятичное число.
\N Восьмеричная константа (где N — Это сама восьмеричная константа)
\xN Шестнадцатеричная константа (где N — Это сама шестнадцатеричная константа)
15. Как записываются вещественные константы в языке С++?
Для определения типов целочисленных и вещественных констант в C++ используются суффиксы.
По умолчанию вещественная константа принадлежит к типу double (двойная точность). Чтобы обозначить, что константа на самом деле float , нужно добавить символ f или F после числа: 2.7f, также перед float (одинарная точность) необходимо написать const. Символ l или L означает, что записанное число относится к типу long double .
const float pi_f = 3.14f;
double pi_d = 3.1415;
long double pi_l = 3.1415L;
Для констант с плавающей запятой имеются следующие суффиксы: f или F для типа float; 1 или L для типа long double. Следующие константы имеют тип long double и float соответственно:
3.14159L
1.28f
Вещественная константа, определенная без суффикса, автоматически имеет тип double.
Константа |
Формат |
Примеры |
Целая |
Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль |
8, 0, 199226 |
Восьмеричный: нуль, за которым следуют восьмеричные цифры (0..7) |
01, 020, 07155 |
|
Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0..9, A..F) |
0xA, 0x1B8, 0X00FF |
|
Вещественная |
Десятичный: [цифры].[цифры]. Могут быть опущены либо целая часть, либо дробная, но не обе сразу. |
5.7, .001, 35. |
Экспоненциальный: [цифры][.][цифры]{E|e}[+|–][цифры] Могут быть опущены либо целая часть, либо дробная, но не обе сразу. Если указаны обе части, символ точки обязателен. |
0.2E6, .11e–3, 5E10 |
|
Символьная |
Один или два символа, заключенных в апострофы |
'A', 'ю', '*', 'db', '\0','\n', '\012', '\x07\x07' |
Строковая |
Последовательность символов, заключенная в кавычки |
"Здесь был Vasia","\tЗначение r=\0xF5\n" |
16. Что такое «препроцессор» языка С++?
Препроцессор С++ — программный инструмент, изменяющий код программы для последующей компиляции и сборки, используемый в языках программирования C++. Этот препроцессор обеспечивает использование стандартного набора возможностей:
Замена триграфов??=,??(,??) (и других) символами #, [,]
Замена комментариев пустыми строками
Включение файла — #include
Макроподстановки — #define
Условная компиляция — #if, #ifdef, #elif, #else, #endif
Препроцессор просматривает программу до компилятора и заменяет символические аббревиатуры в программе на соответствующие макроопределения. Он отыскивает другие файлы, подключает их, а также может изменять условия компиляции. Диалог программиста с препроцессором осуществляется с помощью директив.
Триграф — последовательность из трёх символов, первые два из которых — вопросительные знаки, а третий указывает на значение триграфа.
Триграф Эквивалентный символ.
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~