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(продолжение)
На последней лекции по дисциплине информатика мы ввели понятие динамического массива.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.