- •Обзорные лекции по курсу
- •Int Temp[12] - {2, 4, 7, } ;
- •Int main ()
- •Разыменование указателей
- •Int main()
- •Void *ptr;
- •Int main ()
- •Int main ()
- •Int main ()
- •Void *malloc(size_t size);
- •Void *calloc( size_t num, size_t size );
- •Void free(void *block);
- •Int main(void)
- •Int* pRegion;
- •Void newHandler()
- •Int main()
- •Int main ()
- •Int strcmp(const char* strl, const char* str2)
- •Int stricmp(const char* strl, const char* str2)
- •Int strncmp(const char* strl,
- •Int strnicmp(const char* strl,
- •Void *malloc(size_t size);
- •Void *calloc( size_t num, size_t size );
- •Void free(void *block);
- •Int main(void)
- •Int* pRegion;
- •Int main ()
- •Упражнения для самопроверки
Карасев Н.И.
Методология объектно-ориентированного программирования
Обзорные лекции по курсу
Лекция 4. Статические и динамические массивы. Указатели и адреса объектов.
Массивы символов
Определение размера массива посредством константной переменной вместо литеральной константы делает программу более понятной и масштабируемой.
При выполнении цикла в массиве индекс массива никогда не должен быть ниже 0 и всегда должен быть меньше, чем общее число элементов в массиве(на единицу меньше чем размер массива ).Условие выхода из цикла должно гарантировать доступ к элементам вне этого диапазона.
Присваивайте начальные значения указателям во избежание неожиданных результатов.
Содержание лекции:
1.Массивы и указатели
2.Многомерные массивы
3.Динамическое выделение массивов
4 Массивы символов
5.Резюме
6. Упражнения для самопроверки
Язык C++, как и многие другие языки высокого уровня, предоставляет программисту возможность работы с наборами однотипных данных, которые именуют массивами. Отдельная единица таких данных, входящих в массив, называется элементом массива. В качестве элементов массива могут выступать данные любого типа (один тип данных для каждого массива). Так как массивы являются структурами хранения данных в оперативной памяти, то более формальное определение массива будет иметь такой вид: Массив- это последовательная группа ячеек памяти, имеющих одинаковое имя и одинаковый тип.
Для того, чтобы адресоваться к отдельным элементам массива необходимо иметь общее имя для всех элементов имя массива и номер ячейки памяти или индекс, где размещено значение элемента. В зависимости от сложности организации однотипных данных в массивах различают одномерные, двухмерные и… многомерные массивы.
Мерность массива определяется числом индексных выражений, необходимых для ссылки к ячейке отдельного элемента массива в последовательности ячеек памяти, выделенных под массив. В связи с этим элементы массивов часто называют индексированными переменными и обозначают соответственно: а[1], b[i+j] – одномерные массивы,
с[3] [4],d[j][i] – двумерные массивы, f[1][3]….[n], s[k] [d+3]….[n] – n –мерные массивы.
Использованию массива в выражениях предшествует его объявление, резервирующее под массив определенное количество памяти. При этом указывается тип элементов массива, имя массива и его размер. Размер сообщает компилятору, какое количество элементов будет размещено в массиве.Например: описаниеint fl[20]; зарезервирует в памяти место для размещения 20 целочисленных элементов массиваfl, а объявление
float m[100], n[20][30];
зарезервирует память для 100 элементов массива вещественных чисел mи 600 элементов массива вещественных чиселn.
Элементы массива в памяти располагаются непосредственно один за другим. На рис. 4.1 показано размещение элементов одномерного массива из двухбайтных элементов (типа short) в памяти.
Обращение к элементам массива может осуществляться одним из двух способов:
• по номеру элемента в массиве или через его индекс;
• по указателю.
При обращении через индекс за именем массива в квадратных скобках указывается номер элемента, к которому требуется выполнить доступ. Таким образом, запись типа:
x = Array[13];
y = Array[19];
выполнит присвоение переменной x значения 14-го элемента, а переменной у - значение 20-го элемента массива.
Рис. 4.1. Размещение элементов одномерного массива в памяти
При обращении к элементам массивов через индексы их можно представлять: целочисленными константами,например, а[1], переменными, например, d[j,i] или выражениями, например, b[i+j]. В С++ нумерация ячеек памяти, выделяемых под массив, начинается с нуля. Таким образом, первый элемент массива b указывают как b[0],второй элемент, как b[1], седьмой - как b[6], а i-ый элемент массива указывают как b[i-1].
Доступ к элементам массива через указатели и сам механизм указателей и ссылок рассмотрим ниже, а сейчас рассмотрим механизм инициализации элементов массивов.
Инициализация массивов
Инициализацию массивов, содержащих элементы базовых типов, можно производить при их объявлении. При этом непосредственно после объявления необходимо за знаком равенства (=) перечислить значения элементов в фигурных скобках через запятую (,) по порядку их следования в массиве. Например, выражение;
int Temp[12] = {2, 4, 7, 11, 12, 12, 13, 12, 10, 8, 5, 1};
проинициализирует массив температур Temp соответствующими значениями. Так, элемент Теmр[0] получит значение 2, элемент Temp [ 1 ] - значение 4 и т.д. до элемента Temp [ 11 ] с присвоением ему значения 1.
Если в списке инициализации значений указано меньше, чем объявлено в размере массива, имеет место частичная инициализация. В этом случае иногда после последнего значения в инициализирующем выражении для наглядности ставят запятую: