Pamięć na tablice struktur możemy przydzielać dynamicznie w sytuacji, gdy potrzebujemy bardzo dużo jej elementów lub gdy z góry nie wiemy ile komórek tablicy będziemy potrzebować:
#include<iostream>
using namespace std;
struct punkty{
int x, y;
char nazwa;
};
int main()
{
int n;
cout<<"Podaj liczbę punktów do stworzenia: ";
cin>>n;
//dynamiczne przydzielenie pamięci na n elementów
punkty *tab = new punkty [n];
//przypisanie wartosci punktów
for(int i=0;i<n;i++)
{
cout<<"Punkt "<<i+1<<":\n";
cout<<"x = ";
cin>>tab[i].x;
cout<<"y = ";
cin>>tab[i].y;
cout<<"nazwa = ";
cin>>tab[i].nazwa;
}
cout<<endl;
//wypisanie punktów
for(int i=0;i<n;i++)
{
cout<<"Punkt "<<i+1<<":\n";
cout<<"x = "<<tab[i].x<<endl;
cout<<"y = "<<tab[i].y<<endl;
cout<<"nazwa = "<<tab[i].nazwa<<endl;
}
return 0;
}
Out:
Podaj liczbę punktów do stworzenia: 3 Punkt 1: x = 1 y = 2 nazwa = a Punkt 2: x = 3 y = 4 nazwa = b Punkt 3: x = 5 y = 6 nazwa = c Punkt 1: x = 1 y = 2 nazwa = a Punkt 2: x = 3 y = 4 nazwa = b Punkt 3: x = 5 y = 6 nazwa = c
Aby odwołać się do pola, który jest wskaźnikiem należy operator "*" wyłączyć przed nazwę zmiennej strukturalnej:
#include<iostream>
using namespace std;
struct punkt{
int *x, *y;
char nazwa;
};
int main()
{
punkt A;
//wczytanie punktu A
cin>>*A.x; //przypisanie wartosci do zmiennej wskaźnikowe
//wypisanie wartosci pola *x
cout<<*A.x<<endl;
return 0;
}
Do pól struktury, która jest wskaźnikiem, odwołujemy się za pomocą operatora "->":
#include<iostream>
using namespace std;
struct punkt{
int *x, *y;
char nazwa;
};
int main()
{
punkt *A = new punkt;
//wczytanie punktu A
cin>>*A->x; //przypisanie wartosci do zmiennej wskaźnikowej
cin>>*A->y;
cin>>A->nazwa; //przypisanie wartosci do zwykłej zmiennej
//wypisanie wartosci punktu A
cout<<*A->x<<endl;
cout<<*A->y<<endl;
cout<<A->nazwa<<endl;
return 0;
}