- •Пространство имен.
- •Представление целых чисел
- •Определение переменных
- •Особенности использования некоторых типов данных: переполнение регистров переменных
- •Базовые конструкции структурного программирования
- •Условный оператор if
- •Ветвление процесса выполнения программ
- •Тема: Указатели и ссылки
- •Адреса переменных. Оператор взятия адреса
- •Указатели
- •Динамически распределяемая память
- •Указатели на объекты
- •Выделяют два основных отличия между статическими и динамическими объектами.
- •Перегрузка функций
- •Значения параметров функции, используемые по умолчанию
- •Определение массива
- •“Sdjdkjdhkfsdjhvm,c,bnmsierhoerhsdklfhbnasmbf”; //правильно Пустая строка записывается “ ” и имеет тип const char[1]. Использование датчика случайных чисел для формирования массива
- •Конструкторы и деструкторы
Определение массива
Массив – это упорядоченная последовательность переменных одного типа. Каждому элементу массива отводится одна ячейка памяти. Элементы одного массива занимают последовательно расположенные ячейки памяти. Все элементы имеют одно имя – имя массива и отличаются индексами – порядковыми номерами в массиве. Количество элементов в массиве называется его размером. Чтобы отвести в памяти нужное количество ячеек для размещения массива, надо заранее знать его размер. Резервирование памяти для массива выполняется на этапе компиляции программы.
Определение массива состоит из спецификатора типа, имени массива и размера в квадратных скобках:
тип_элемента имя_массива [размер]
Размер задает число элементов массива (не менее 1) и должен быть константным выражением.
Например.
int myArray [100]; // массив из 100 элементов целого типа
Операция sizeof(myArray), примененная к объявленному массиву даст результат 400, т. е. 100 элементов по 4 байта.
const int buf_size=512, max_files=20;
int staff_size = 27;
char buffer [buf_size]; //правильно
char Table[max_files - 3]; //правильно
double salary[staff_size]; //ошибка
bool flag[10]; //правильно
Нумерация элементов начинается с 0, поэтому для массива размером 10, правильными значениями индексов будут 0..9. К каждому элементу массива можно обратиться с помощью операции индексирования: flag[2] = true; .
Инициализация массива
Небольшие массивы переменных встроенных типов (например, int или char) можно инициализировать при объявлении массива:
тип_элемента имя_массива [размер] = { список_значений}
здесь список_значений – перечисление через запятую значений элементов массива
Например.
int a[10]={1,2,3,4,5,6,7,8,9,10} ; //массив из 10 целочисленных значений
или
int b[ ]={1,2,3,4,5,6,7,8,9,10} ;
Если размер массива не указан, но список значений присутствует, то будет создан и инициализирован массив достаточного размера, чтобы содержать все перечисленные значения. Таким образом, две вышеприведенные строки инициализации массивов a и b идентичны.
int iArray[3] = {1,2,3}
int v1[ ] = {1,2,3,4};
char v2[ ] = {‘a’,’b’,’c’};
char v3[2] = {‘a’,’b’,’c’}; //ошибка (см. ниже)
int v4[8] = {1,2,3,4}
Когда массив объявлен без указания размера, но при этом инициализирован списком, его размер определяется исходя из количества элементов в списке инициализации. Если размер явно указан, задание большего числа элементов в списке инициализации является ошибкой. Если в списке инициализации не достает элементов, то всем остальным элементам массива присваивается 0.
Рассмотрим пример объявления и заполнения массива.
#include <iostream>
int main()
{
int myArray[3]; //объявление массива
int i;
for (i=0; i<3; i++) //заполнение массива значениями
{
std::cout<<"Value for array [ "<< i <<" ]: "; //ввести значение
std::cin>>myArray[ i ]; //сохранение значения в соответствующем //элементе
}
for (i=0; i<3; i++)
std::cout<<i<<":"<<myArray[i]<<"\n"; // вывод массива
return 0;
}
Массиву не может быть присвоено значение другого массива, недопустима и инициализация одного массива другим. Чтобы скопировать один массив в другой, придется проделать это для каждого элемента по отдельности:
const int array_size=7;
int ia1[ ]= {0,1,2,3,4,5,6};
int main()
{
int ia2[array_size];
for (int i=0; i<array_size; ++i)
ia2[i] = ia1[i];
return 0;
}
Язык С++ не обеспечивает контроля индексов массива – ни на этапе компиляции, ни на этапе выполнения. Программист сам должен следить за тем, чтобы индекс не вышел за пределы массива.
Массивы символов удобно инициализировать не списком символьных значений в фигурных скобках, а строковым литералом. Строковый литерал – это последовательность символов, заключенная в двойные кавычки. В строковом литерале на один символ больше, чем используется при записи. Он всегда заканчивается нулевым символом ‘\0’.
const char ch1[ ] = {‘C’,’+’,’+’}; //размер массива ch1 - 3
const char ch2[ ] = ”C++”; //размер массива ch2 – 4
const char ch3[6] = ”Daniel”; //ошибка
const char ch4[ ] = ”abcdefghsdkjsdkskeuifhshabavbscaatsfdatd”