русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Организация динамического двумерного массива


Дата добавления: 2013-12-23; просмотров: 782; Нарушение авторских прав


Массивы указателей

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

Пример инициализации массива указателей существующими адресами

#include <iostream>

using namespace std ;

int main ( )

{

const int SIZE = 4 ;

int array [ SIZE ] = { 5, -3, 0, 17 } ;

// объявление массива указателей на целый тип

int* p [ SIZE ] ;

// инициализация массива указателей адресами

for ( int i = 0; i < SIZE; i++ ) p [ i ] = & array [ i ] ;

// вывод состояния массива указателей

for ( int i = 0; i < SIZE; i++ ) cout << p [ i ] << '\t' ;

cout << endl ;

// вывод значений через массив указателей

for ( int i = 0; i < SIZE; i++ ) cout << * p [ i ] << "\t\t" ;



cout << endl ;

return 0 ;

}

 

Для присвоения элементу массива указателей значения адреса переменной типа, на который он указывает, следует выполнить операцию взятия адреса (&) для переменной. Чтобы получить значение переменной, на которую указывает элемент массива указателей, необходимо разыменовать указатель.

Пример динамического формирования массива указателей

#include <iostream>

using namespace std ;

const int SIZE = 4 ;

int main ( )

{

// инициализация массива указателей адресами

// и значениями по выделенным адресам

int* p [ SIZE ], x ;

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

{

cout << "-> " ; cin >> x ;

p [ i ] = new int ( x ) ;

}

// вывод состояния массива указателей

for ( int i = 0; i < SIZE; i++ ) cout << p [ i ] << '\t' ;

cout << endl ;

// вывод значений через массив указателей

for ( int i = 0; i < SIZE; i++ ) cout << * p [ i ] << "\t\t" ;



cout << endl ;

// освобождение памяти

for ( int i = 0; i < SIZE; i++ ) delete p [ i ] ;

return 0 ;

}

Следует помнить:

- базовый тип массива указателей, тип в операторе new и тип переменной, адрес которой хранится в массиве указателей, должны совпадать;

- выделенные боки памяти должны быть освобождены после их использования;

-освобождается оперативная память для массива указателей с помощью оператора delete для каждого указателя отдельно.

 

Динамический двумерный массив создается в процессе исполнения программы. Количество строк и количество столбцов двумерного массива определяется по ходу выполнения программы. Сначала выделяется блок памяти для массива указателей на количество строк матрицы. Далее в цикле выделяются блоки памяти размером на количество столбцов, начальные адреса которых передаются соответствующему указателю из массива указателей.

Пример создания динамического двумерного массива

#include <iostream>

using namespace std;

int main ( )

{

double** p ; // указатель на указатель

// ввод количества строк m и столбцов n

int m, n ;

cout << "Enter quantity of rows\t-> " ; cin >> m ;

cout << "Enter quantity of columns\t-> " ; cin >> n ;

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

p = new double* [ m ] ;

// выделение памяти для элементов строк

for ( int i = 0; i < m; i++ ) p [ i ] = new double [ n ] ;

// заполнение матрицы значениями

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

for ( int j = 0; j < n; j++ ) cin >> p [ i ] [ j ] ;

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

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

{

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

cout << p [ i ] [ j ] << '\t' ;

cout << endl ;

}

// освобождение памяти

for ( int i = 0; i < m; i++ ) delete [ ] p [ i ] ;

delete [ ] p ;

return 0 ;

}

Указатель на указатель р позволяет обращаться к элементам матрицы так, как если бы она была объявлена обычным способом. В конце программы выделенная память освобождается в два этапа:

1 этап: - в цикле освобождается память для каждой строки отдельно;

2 этап: - освобождается память от массива указателей.

 



<== предыдущая лекция | следующая лекция ==>
Указатели и спецификатор const | Функции работы со строками


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.