Из объявления tst *arSd; ещё не видно, будет создан указатель на одну структуру или динамический массив структур. Это зависит от того, как будет проинициализирован этот указатель. Если, как в предыдущем пункте, выполнить операцию arSd=new tst; то будет создан указатель на одну структуру.
С помощью этой же операции new можно выделить память для динамического массива структур. Это выполняется следующим образом:
int n; cin>>n; // или const n=5;
arSd=new tst[n];
Адрес начала массива структур присваивается переменной указателю arSd. Доступ к полям i – й структуры осуществляется следующим образом:
for (int i=0; i<n;i++)
{ arSd [i].m=random(5)+1;
arSd [i].ard=new float [arSd [i].m];
for (int j=0; j< arSd [i].m; j++)
cin>>(arSd [i].ard[j]);
…
}
Здесь и массив структур arSd, и массив в структуре ard динамические.
Ссылка на структуру.
Для структур, как и для простых переменных, можно использовать ссылочный тип. Например, tst &SS1=S1; При этом ссылка на структуру должна быть проинициализирована другой ранее объявленной переменной такого же структурного типа, но не указателем.
По аналогии с простыми переменными после такого объявления SS1 и S1 — это два альтернативных имена (синонимы) одной и той же переменной структурного типа. Поэтому если мы изменим какое-нибудь поле в структуре S1, то этим самым изменится и это же поле в структуре SS1. Например, если выполнить
S1.per=20; cout<<(SS1.per);
то выведем число 20, несмотря на то, что SS1.per мы явно, казалось бы, не меняли.