Programowanie i algorytmy

Struktury a wskaźniki

powrót

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>
#include<cstdlib>
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;
  }
 
 
  system("pause");
 
  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 kontynuować, naciśnij dowolny klawisz . . .
 

 

Zmienne wskaźnikowe jako pola struktur

Aby odwołać się do pola, który jest wskaźnikiem należy operator "*" wyłączyć przed nazwę zmiennej strukturalnej:

#include<iostream>
#include<cstdlib>
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;
 
  system("pause");
 
  return 0;
}

 

Struktura jako wskaźnik

Do pól struktury, która jest wskaźnikiem, odwołujemy się za pomocą operatora "->":

#include<iostream>
#include<cstdlib>
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;
 
  system("pause");
 
  return 0;
}