Массивы указателей как структура данных
Массив указателей (МУ) – простейшая структура данных, в которой проявляется различие между физическим и логическим порядком следования элементов. Способ организации данных ясен уже из самого определения: это массив, каждый элемент которого содержит указатель на переменную (объект). Если это записать в терминах контекстного определения переменных, то получим, например double *p[20]; Переменную p следует понимать как массив (операция []), каждым элементом которого является указатель на переменную типа double (операция *). Переменная p является массивом указателей как тип данных, но не является таковой как структура данных. Чтобы превратиться в структуру данных, она быть дополнена указуемыми переменными и указателями (связями). Многообразие вариантов реализации массивов указателей возникает по нескольким причинам: ·cам массив указателей, указуемые переменные и ссылки (указатели) могут быть заданы статически (в тексте программы), либо динамически созданы во время ее выполнения; ·двоякая интерпретация указателя как указателя на отдельную переменную и на массив переменных (строку), позволяет создавать одномерные СД – массивы указателей на переменные и двумерные – массивы указателей на массивы (строки) таких переменных; ·указуемые переменные могут быть «собственностью» структуры данных, однако массив указателей может ссылаться и на переменные (объекты), являющиеся составными частями других структур данных. Основная сложность заключается в том, что во всех случаях используются одни и те же типы данных, а конкретный вид структуры данных определяется контекстом их использования в тексте программы. Типы данных, используемые при работе с массивами указателей Один тип данных уже был нами упомянут – это массив указателей, переменная вида int *p[]. Кроме нее используется еще одни тип вида int **pp, который можно определить в общем виде какуказатель на указатель.
Многоуровневые указатели. ·Рассмотрим определение переменной: ·В соответствии принципом контекстного определения pp нужно интерпретировать как переменную, при косвенном обращении к которой получается указатель на переменную типа double, то есть как указатель на указатель или адрес указателя. Но ·Поскольку любой указатель в Си может ссылаться как на отдельную переменную, так и на область памяти (массив), то в применении к двойному указателю получаются 4 вариантаструктур данных, а именно: 1) указатель на одиночный указатель на переменную типа double; ·Третья интерпретация позволяет нам использовать двойной указатель для работы с известными нам массивами указателей следующим образом: Здесь повторяется та же самая система эквивалентности обычных массивов и указателей - типов double* и double[], но применительно не к массивам обычных переменных, а к массивам указателей. Короче говоря, типы double** и double *[] различаются так же, как указатель-переменная и указатель-константа. ·Массив указателей типа double *[] является статической структурой данных, размерность которой определяется при трансляции. Двойной указатель типа double** может ссылаться и на динамический массив указателей, который создается во время работы программы под заданную размерность: double **create(int sz){ Динамические матрицы. Статические массивы, аля int a[3]={3,5,7}, хороши своей простотой. Но бывают случаи, когда "статика" массивов мешает. Например, Вы хотите написать программу перемножения матриц любых порядков. Вот тут статический массив не просто мешает - его применение здесь практически невозможно! Итак, встречайте - динамический массив! Что же это такое? Это когда Вы во время работы своей программы (а не во время разработки) можете менять размеренность массивов. И начнем мы с одномерных (векторных) массивов. int x = 5; // тут задается "длина" массива (при заданном значении нам доступно 5 элементов int)
delete[]arr; int x = 5;
for(int i=0;i<x;i++) delete[]arr[i]; Передача параметров функции main.
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (643)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |