Этапы разработки программы. Разработка или выбор алгоритма решения поставленной задачи. Оформление документации на программу, страница 20

b=a;  // В данном случае массивы a и b неразличимы в памяти и изменение значений в        одном из  массивов,  приведет к изменению значений в другом массиве.

Для того чтобы получить два различных массива, значения из массива а могут быть переданы в массив b следующим образом:

int i;

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

b[i]=a[i];

Кроме рассмотренных ранее ранее операций & и * над указателями в языrе C могут быть выполнены действия целочисленной арифметики.

Операции над указателями.

Имеем описание : int mas[6];. Адрес шестого элемента массива можно определить следующими способами:

& mas[5];                   mas+5;

Если а – массив или указатель, а i – целое, то a[i] , *(a+i) - эквивалентны a[i] , *(a+i), причем доступ к элементам массива не зависит от способа их описания.

1) Сложение указателя с числом(++,+n)или вычитание  указателей всегда выполняется в единицах того типа, к которому относится указатель.

а            а+1     а+2    а+3     а+4     а+5                

a[0]    a[1]     a[2]    a[3]     a[4]    a[5]

Прибавление к указателю 1 обеспечивает переход к следующему элементу массива, независимо от типа его элементов.

2)   Указатели можно сравнивать между собой.

Указатели и многомерные массивы.

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

int mas [4][2];

int *ptr;

ptr                ptr +1           ptr +2          ptr +3          ptr +4           ptr +5

mas[0][0]

mas[0][1]

mas[1][0]

mas[1][1]

mas[2][0]

mas[2][1]

…….

Размещение двумерного массива в памяти

Двумерные массивы располагаются в памяти подобно одномерным массивам, занимая последовательные ячейки памяти. Выражение ptr = mas указывает на первый столбец первой строки матрицы. Записи mas и & mas[0][0] равносильны. Элементы многомерного массива в общем случае располагаются на непрерывном участке памяти таким образом, что самый правый индекс изменяется первым т.е. в C (C++) двумерный массив в памяти представляется как массив массивов.

Пример: int mas[2][3];          1 2 3      - mas[0]

4 5 6     - mas[1]

объявлен массив из 2–х элементов, каждый из которых представляет собой массив из 3-х целых чисел.

18.3 Динамические массивы.

Динамическим называется массив, размерность которого становится известной в процессе выполнения программы.

# include<stdio.h>                                         #include<iostream.h>

int n;                                                               int n; //размерность массива           

………………….                                           ………………………..

scanf(“%d”,&n);                                            cin >> n;

int * mas = (int*)malloc(sizeof(int)n);           int * mas = new int [n]; // выделение памяти под массив

free(mas);                                                                                   delete mas; // освобождение памяти           

Замечание: Язык C++ имеет свою библиотеку ввода/вывода. Файл iostream.h обеспечивает включение в программу средств связи(называемых потоками) со стандартными устройствами ввода/вывода.

сin>>n>>h; - оператор ввода из стандартного потока cin. Операция >> (извлечение из потока) обеспечивает считывание данных с клавиатуры, их преобразование в соответствии с типом правого операнда и присваивание полученного значения правому операнду.

Count<< “введите x”; count<<”ln x =”<<x; - оператор вывода  в стандартный поток count.

В PASCAL:

Type m = array[1..2] of real;

Var mas :^ m;

N, I : integer;

Begin {$R-} {выключение автоматической проверки значения индекса массива}

…………..

readln(n); {ввод размерности массива}

getmem(mas,n*6);

for i := 1 to n do

mas ^ [i] := 0;

……………

fremem(mas, n*6)

{$R+}

end.

18.3(продолжение)

На последней лекции по дисциплине информатика мы ввели понятие динамического массива.