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



Имя массива является указателем на массив. Таким образом, доступ к элементам массива осуществляется через указатель с именем массива.

Поскольку имя массива является указателем, допустимо, например, такое присваивание: int arrаy[25]; int *ptr; ptr=array;

Обращение к 5-му элементу массива: array[4],*( array + 4), *(рtr + 4).

Указатели и двумерные массивы

При размещении элементов двумерных массивов они располагаются в памяти подряд по строкам, т.е. быстрее всего изменяется последний индекс, а медленнее – первый. int arr[m][n]:

Адрес (arr[i][j])= Адрес(arr[0][0]) + (i*n+j)*k,

где k – количество байтов, выделяемое для элемента массива (в зависимости от типа).

Указатели на двумерные массивы в языке С++ – это массивы массивов, т.е. такие массивы, элементами которых являются массивы

Доступ: Например, пусть i=1, j=2, тогда

обращение к элементу arr[1][2]:

· arr[i][j]    arr[1][2]=10

· *(*(arr+i)+j) *(*(arr+1)+2)=10

· (*(arr+i))[j] (*(arr+1))[2]=10

Например, с помощью указателя ptr:

 int *ptr=arr обращение к элементу arr[1][2]:

· ptr[1*3 + 2] /*здесь 1 и 2 - это индексы используемого элемента,

  а 3 это число элементов в строке*/

Краткое понятие динамических массивов

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

Синтаксис: Тип * ИмяМассива; Например: int *a;

Обращение к элементам одномерного динамического массива

ИмяМассива[ВыражениеТипаКонстанты]; или ИмяМассива[ЗначениеИндекса];

Например:

mas[5] – индекс задается как константа,

sl[i] – индекс задается как переменная,

array[4*p] – индекс задается как выражение.

       Можно обратиться к нему и другим способом: *( mas +5). После работы с динамическим массивом память необходимо освобождать.

int *a;

       int n, i;

cout << "vvedite n: "; cin >> n;

a = new int [n]; //Выделение памяти под массив

……….

delete [] a; //Освобождаем память

Двумерный динамический массив – это двумерный массив, расположенный в динамической памяти.

Указатель на двумерный динамический массив – это указатель на массив указателей на одномерные массивы или на начало выделяемого участка динамической памяти, если двумерный массив представляется как одномерный.

Объявление двумерных динамических массивов

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

Синтаксис:

Тип ** ИмяМассива;

ИмяМассива – идентификатор массива, то есть имя двойного указателя для выделяемого блока памяти.

Тип – тип элементов объявляемого динамического массива. Элементами динамического массива не могут быть функции и элементы типа void.

Например: int **a; float **m;

Выделение памяти под двумерный динамический массив

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

       Пусть r – строка, с – столбец.

       int **matr = new int *[r]; // объявлена переменная типа «указатель

       // на указатель на int

       /* организуется цикл для выделения памяти под каждую строку массива*/

       for (int i=0; i<r; i++)

       matr [i] = new int [c];

Освобождение памяти из-под массива

       delete [] имя_массива

Обращение к элементам двумерного динамического массива

Адресация элементов динамического массива осуществляется с помощью индексированного имени.

Синтаксис:

ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];

или

ИмяМассива[ЗначениеИндекса][ЗначениеИндекса];

Например:

mas[5][7] – индекс задается как константа,

sl[i][j] – индекс задается как переменная,

array[4*p][p+5] – индекс задается как выражение.


Дата добавления: 2021-02-10; просмотров: 64; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!