Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПП. ЛЕКЦИИ! Готовимся к экзамену))).docx
Скачиваний:
12
Добавлен:
10.12.2018
Размер:
175.63 Кб
Скачать

Доступ к элементам массива

В языке C++ имя массива представляет собой не только имя, которое вы используете в своих программах, но и является адресом, по которому в памяти находится первый элемент массива. Поэтому к элементам массива можно обращаться двумя способами: по индексу элемента и по смещению относительно первого элемента.

Пример

int m[6] = {4, 3 , 1, 4, 7, 8 };

Обращение к 4-му элементу массива m:

m[3] – по индексу

(m + 3)[0] – по смещению относительно первого элемента

Возможны и другие варианты:

(m + 0)[3]

(m + 2)[1]

(m - 2)[5]

Наиболее полезно использовать такой подход к массивам, содержащим символьные строки.

Пример

char names [ ]={'Иван', 'Петр', 'Елена' }

Массив names будет выглядеть в памяти следующим образом:

0

И

1

В

2

А

3

Н

4

\0

5

П

6

Е

7

Т

8

Р

9

\0

10

Е

11

Л

12

Е

13

Н

14

А

15

\0

Команды вывода дают следующий результат:

cout << names; // выводится «Иван» (до признака конца строки)

cout << names+5; // выводится «Петр»

Многомерные массивы

Многомерный массив – это массив, в котором элементы имеют более чем один индекс.

Чаще всего используются двумерные массивы.

При объявлении многомерного массива необходимо указать C++, что массив имеет более чем одно измерение.

Формат объявления двумерного массива:

<тип элементов массива> <имя массива>[количество строк][количество столбцов]

Пример 1

int t[3][4]; // описывается двумерный массив, состоящий из 3 строк и 4 столбцов

Элементы массива:

t[0][0] t[0][1] t[0][2] t[0][3]

t[1][0] t[1][1] t[1][2] t[1][3]

t[2][0] t[2][1] t[2][2] t[2][3]

При выполнении команды объявления массива под массив резервируется место. Элементы массива располагаются в памяти один за другим:

Пример 2

int temp [3] [15] [10]; // резервируется место под 3-х мерный массив

В памяти многомерные массивы представляются как одномерный массив, каждый из элементов которого, в свою очередь, представляет собой массив.

Рассмотрим на примере двумерного массива.

int a[3][2]={4, l, 5,7,2, 9};

Представляется в памяти:

a[0][0]

заносится значение 4

a[0][1]

заносится значение 1

a[1][0]

заносится значение 5

a[1][1]

заносится значение 7

a[2][0]

заносится значение 2

a[2][1]

заносится значение 9

Второй способ инициализации при объявлении массива

int а[3][2]={ {4,1}, {5, 7}, {2, 9} };

Обращение к элементу массива производится через индексы.

Примеры

cout<< а[0][0]; // выводится значение 4

cout << a[1][1]; // выводится знaчение 7

Пример

Программа, которая инициализирует массив и выводит его элементы на экран.

#include <iostream.h>

main ()

{

int a[3] [2]={ {1,2}, {3,4}, {5,6} };

int i,j;

for (i=0; i<=2; i++)

for(j=0;j<=l;j++)

cout <<"\n a["<< i <<"," << j <<"] ="<< a[i]|j];

return 0;

}

Для того чтобы убрать из программы явные значения размера и массива, можно воспользоваться директивой define:

#include < iostream.h>

#define I 3

#define J 2

main()

{

int a[I][J]={ {l,2}, {3,4}, {5,6} };

int i, j;

for ( i=0 ; i< I; i++)

for( j=0; j< J; j++)

\cout <<"\n a["<< i <<"," << j << "] ="<< a[i][j];

return 0;

}

При передаче массива в функцию всегда происходит передача его адреса. Т.о. в C++ все массивы передаются по адресу.

Пример

Вводится квадратная матрица с максимальным размером 10 на 10. Ввод матрицы оформлен в виде отдельной функции vvod. Программа заменяет все отрицательные числа их модулями.

#include <iostream.h>

void vvod (int u[10][10], int n)

{

int i,j;

for (i=0; i<n; i++)

{ cout <<"\nVvedi "<< i<<" stroky";

for (j=0; j< n; j++)

cin>> u[i][j];

}

}

void main()

{

int a[10][10];

int n,i,j,min;

cout<<"\nВведите количество строк и столбцов";

cin>>n;

vvod(a, n);

for (i=0; i< n; i++)

for (j=0; j< n; j++)

if (a[i][j] < 0) a[i][j]=-a[i][j];

// Вывод матрицы

cout <<"\n";

for (i=0; i< n; i++)

{

for (j=0; j< n; j++)

cout<< u[i][j]<<" ";

cout<<"\n";

}

}

Принимающая функция получает не весь массив, а только адрес первого элемента массива. Несмотря на то, что в блоке main массив называется а, а в функции vvod – u, это один и тот же массив.