Пусть объявлена структура для хранения декартовых координат одной точки на плоскости:
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.