![](/user_photo/2706_HbeT2.jpg)
- •Лексемы
- •Идентификаторы
- •Константы
- •Операции
- •Знаки пунктуации
- •Основные типы данных.
- •Описание переменных
- •Оператор присваивания
- •Примеры программ
- •Форматированный ввод, вывод
- •Особенности ввода, вывода символов
- •Функции gets, puts, atoi, atol и atof
- •Занятие 2. Операторы выбора.
- •Выражения, операции
- •Логические операции
- •Условная операция
- •Условный оператор
- •Оператор перехода goto
- •Оператор выбора switch
- •Оператор цикла с предусловием (while)
- •Оператор цикла с постусловием (do - while)
- •Оператор цикла for
- •Примеры использования операторо цикла
- •Занятие 3. Указатели. Ссылки. Массивы. Работа со строками.
- •Указатели
- •Операции разыменования и взятия адреса
- •Инициализация указателей
- •Арифметические операции с указателями
- •Присваивание указателей
- •Сравнение указателей
- •Операция new
- •Операция delete
- •Примеры использования указателей
- •Одномерные массивы
- •Инициализация одномерных массивов
- •Примеры работы с одномерными массивами
- •Многомерные массивы
- •Занятие 4. Указатели и массивы.
- •Указатели и одномерные массивы
- •Размещение одномерных массивов в динамической памяти.
- •Массивы указателей
- •Занятие 5. Указатели и многомерные массивы.
- •Двухмерный массив и вспомогательный массив указателей
- •Список рекомендуемой литературы.
Многомерные массивы
Массив может быть многомерным. Двумерные массивы обычно используются для представления матриц, координат и шахматных досок. Для объявления многомерного массива необходимо задать несколько размеров, заключенных в квадратные скобки.
Примеры объявления многомерного массива.
1) double b[34][20];
// Двумерный массив элементов типа double, состоящий из 34 строк и 20 столбцов, первый элемент b[0][0]
2) int a[3][10][21]; // Трехмерный массив элементов типа int, первый элемент
// a[0][0][0]
Многомерный массив также можно инициализировать одновременно с объявлением. При этом надо учитывать, что двумерные массивы (матрицы) запоминаются в памяти построчно, а многомерные запоминаются таким образом, что, если переходить от элемента к элементу, последовательно, то последний индекс изменяется быстрее всего.
Примеры инициализации многомерных массивов.
int a[5][3] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //a[0][0]=1, a[0][1]=2, a[0][3]=3
int a[5][3]={{1,2,3}, // Чтобы не запутаться в числах,
{4,5,6}, // лучше сгруппировать данные по
{7,8,9}, // строкам
{10,11,12}
{13,14,15}};
Занятие 4. Указатели и массивы.
Внимание! Вначале занятия потоковая контрольная! Повторите пройденный материал! Удачи на контрольной!
Теоретическая часть
Указатели и одномерные массивы
В языке С++ указатели и массивы тесно связаны друг с другом. Имя массива соответствует адресу его первого элемента. Поэтому можно присвоить указателю адрес первого элемента, используя просто имя массива:
int iarray[10];
int *pi;
pi=iarray; // Это то же самое, что pi=&iarray[0];
При определении массива ему выделяется память. Но как только память выделена, имя массива воспринимается как константный указатель (его значение нельзя изменить) того типа, к которому отнесены элементы массива. Для любого массива соблюдается равенство:
имя_массива = &имя массива = &имя_массива[0]
Элементы массива хранятся в памяти последовательно друг за друга. Вспомним, что к указателю можно применять операцию +, которая позволяет получить доступ к следующей ячейке памяти. Доступ к i-му элементу массива будет выглядеть следующим образом *(имя_массива + i). Таким образом, можно получить доступ ко всем элементам массива:
#include <stdio.h>
void main( )
{
float mass[4];
for (int i = 0; i<4; i++)
{
*(mass+i) = i + 1;
printf("%2.1f\t", *(mass+i));
}
printf("\n");
}
Отметим, что при работе с массивами код mass[i] компилятор автоматически заменяет на *(mass+i).
Размещение одномерных массивов в динамической памяти.
Если в программе нужно использовать массив, размер которого заранее не известен, то необходимо размещать такой массив в динамической памяти. Для выделения памяти для массива служит операция new:
new имя_ типа[количество_элементов];
Она возвращает указатель на выделенную память.
float *pa;
pa = new float [25];
Теперь по адресу, хранящемуся в pa, можно разместить массив из 25 элементов типа float.
Правила хорошего тона гласят, что выделенную память после использования необходимо освобождать. Для этих целей служит операция delete:
delete [] pa; // Освобождение памяти, выделенной для массива
Пример. Вести с клавиатуры размер одномерного массива типа int. Разместить его в области динамического распределения памяти. Присвоить значения его элементам по формуле A[i]=i. Вывести их на экран. Освободить память.
#include <stdio.h>
void main()
{
int i, N, *pi;
printf("N=");
scanf("%d",&N);
pi = new int[N];
for (i=0; i<N; i++)
{
*(pi+i) = i;
printf(" *(pi+%d)=%d \n", i,*(pi+i));
}
delete [] pi;
}
Результат работы программы:
N=5
*(pi+0)=0
*(pi+1)=1
*(pi+2)=2
*(pi+3)=3
*(pi+4)=4