Esercizio:
Definire un nuovo tipo di dato tramite l'istruzione typedef di nome dipendente, creare poi un array di puntatori di n elementi di tipo dipendente con n scelto dall'utente.#include <iostream>
using namespace std;
typedef struct persona {
char Nome[15];
char Cognome[15];
float Stipendio;
}dipendente; //creo un nuovo tipo di dato "dipendente"
dipendente *puntatore; //creo una variabile di tipo puntatore (dipendente)
main()
{
int ndip;
cout<<"Compito del 13/10/2014";
//Input da utente per dimensione array di puntatori
cout<<endl<<endl<<"Quanti dipendenti vuoi inserire?"<<endl;
cin>>ndip;
puntatore=new dipendente[ndip]; //creo un array di puntatori della dimensione "ndip"
*!* con l'istruzione new dipendente si alloca spazio in memoria nella quantità prevista dal tipo di puntatore utilizzato e si genera l'indirizzo da assegnare al primo elemento dell'array puntatore
//Inserimento dell'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<endl<<"Inserisci il Nome: ";
cin>>puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<"Inserisci il Cognome: "; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cin>>puntatore[i].Cognome;
cout<<"Inserisci lo Stipendio: "; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cin>>puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
}
cout << endl << endl;
//Visualizzo l'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Dati Inseriti nell'elemento "<<i<<": "<<endl;
cout<<endl<<"Nome: " << puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
return 0;
}
Vediamo alcune prove svolte sull'istruzione DELETE per la deallocazione della memoria allocata in precedenza tramite NEW DIPENDENTE
#include <iostream>
using namespace std;
typedef struct persona {
char Nome[15];
char Cognome[15];
float Stipendio;
}dipendente; //creo un nuovo tipo di dato "dipendente"
dipendente *puntatore; //creo una variabile di tipo puntatore (dipendente)
main()
{
int ndip;
cout<<"Compito del 13/10/2014";
//Input da utente per dimensione array di puntatori
cout<<endl<<endl<<"Quanti dipendenti vuoi inserire?"<<endl;
cin>>ndip;
//Visualizzo gli indirizzi puntati dall'array di puntatori SENZA allocazione tramite "new dipendente"
for(int i=0;i<ndip;i++)
{
cout<<"Indirizzi SENZA ALLOCAZIONE 'NEW PUNTATORE' puntato dall'elemento "<<i<< ": "<<endl;
cout<<endl<<"Nome: " << &puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << &puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
puntatore=new dipendente[ndip]; //creo un array di puntatori della dimensione "ndip"
//Visualizzo gli indirizzi puntati dall'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Indirizzi CON ALLOCAZIONE 'NEW PUNTATORE' puntati dall'elemento "<<i<< ": "<<endl;
cout<<endl<<"Nome: " << &puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << &puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
//Inserimento dell'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Inserimento dell'elemento "<<i<< ": "<<endl;
cout<<"Inserisci il Nome: ";
cin>>puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<"Inserisci il Cognome: "; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cin>>puntatore[i].Cognome;
cout<<"Inserisci lo Stipendio: "; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cin>>puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
}
cout << endl;
//Visualizzo l'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Dati Inseriti nell'elemento "<<i<<": "<<endl;
cout<<endl<<"Nome: " << puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl;
}
cout<<"_____________________________________________________________"<<endl;
cout<<endl<<"Ripetiamo ora la visualizzazione degli array dopo aver utilizzato"<<endl<<"l'istruzione 'delete' per deallocare lo spazio di memoria"<<endl<<endl;
delete [] puntatore;
//Visualizzo l'array di puntatori
for(int i=0;i<ndip;i++)
for(int i=0;i<ndip;i++)
{
cout<<"Indirizzi DOPO ISTRUZIONE 'DELETE []' puntati dall'elemento "<<i<< ": "<<endl;
cout<<endl<<"Nome: " << &puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << &puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
//Visualizzo l'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Dati presenti nell'elemento "<<i<<" dopo istruzione 'delete': "<<endl;
cout<<endl<<"Nome: " << puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
return 0;
}