русс | укр

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

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

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

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


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

Указатели и вложенные структуры


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


 

Пусть объявлена структура для хранения декартовых координат одной точки на плоскости:

struct TMyP { float x, y;};

Вторая структура использует её:

struct tst2

{ TMyP p1;

unsigned m;

TMyP *p2;

TMyP *dar;

float per;

} S1, *PS, *D;

1) Доступ к полям структуры S1 выполняется так: S1.per, S1.p1.x, S1.p1.y. Перед использованием указателей их надо проинициализировать. Пусть p2 — адрес одной структуры. Тогда S1.p2=new TMyP; Заметим, что в new записываем тип, указанный при объявлении p2. Тогда доступ к простым полям, не указателям, записывается так: S1.p2–>x , S1.p2–>y. При этом первой используется точка, так как S1 — не указатель, а “стрелку” записали, так как p2 — указатель.

Динамический массив в структуре S1 создаём так:

cin >>S1.m; // Вводим размерностьмассива, например, количество точек

S1. dar=new TMyP[S1.m]; //Создаём динамический массив

// Ввод координат точек

for (int j=0; j<S1.m; j++)

{ cin>>S1.dar[j].x;

cin>>S1.dar[j].y;

}

2) Пусть PS — указатель на одну структуру. Поэтому сначала выполняем

PS= new tst2;

Тогда доступ к простым полям, не указателям, выполняется так:

PS–>per, PS–>p1.x, PS–>p1.y.

Здесь наоборот, первой используется “стрелка” , так как PS —указатель, а “точку” записали, так как p1 — не указатель. Пусть p2 — по-прежнему адрес одной структуры:

PS–>p2=new TMyP;

Тогда доступ к полям записывается так:

PS–>p2–>x , PS–>p2–>y.

При этом дважды используется “стрелка”, так как и PS, и p2 — указатели.

Динамический массив в структуре PS создаём в такой последовательности. Сначала вводим размерностьмассива, например, количество точек

cin >> PS–>m;

Затем резервируем память для массива

PS–>ard=new TMyP[PS–>m];

Ввод координат точек



for (int j=0; j< PS–>m; j++)

{ cin>> PS–>dar[j].x;

cin>> PS–>dar[j].y;

}

Заметим, что для доступа к координатам используется точка, так как dar[j] — это не указатель, а j – я структура. Указателем является имя массива dar, а не его элемент.

3) Пусть, наконец, D —динамический массив структур. Тогда сначала определяем его размерность:

int n; cin>>n; // или const n=5;

Затем резервируем память для этого массива:

D=new tst2[n];

Адрес начала массива структур присваивается переменной указателю D. Доступ к простым полям i– й структуры, не указателям, записывается так:

D[i]. per, D[i]. p1.x, D[i]. p1.y.

Здесь дважды используется “точка”, так как и D[i], и p1 — не указатели.

Пусть p2 — по-прежнему адрес одной структуры. Тогда

D[i].p2=new TMyP;

резервирует память для структуры p2, принадлежащей i-й структуре типа tst2. Доступ к координатам в этом случае такой:

D[i].p2–>x , S1.p2–>y.

При этом первой используется точка, так как D[i] — не указатель, а “стрелку” записали, так как p2 — указатель.

Динамический массив в структуре D[i] создаём так. Вводим размерностьмассива для i-й структуры, например, количество точек i-го многоугольника:

cin >> D[i] .m;

Затем создаём динамический массив

D[i]. dar=new TMyP[D[i].m];

и вводимкоординаты точек

for (int j=0; j< D[i].m; j++)

{ cin>> D[i].dar[j].x;

cin>> D[i].dar[j].y;

}

Здесь дважды используется “точка”, так как и D[i], и dar[j] — не указатели, а элементы динамических массивов. Указателями являются имена этих массивов, D и dar соответственно. Понятно, что для работы со всеми структурами массива D нужен, как минимум, ещё один цикл по i.

 



<== предыдущая лекция | следующая лекция ==>
Указатели на структуру | Передача полей структуры в функцию.


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


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

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

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


 


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

 
 

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

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