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;
}