void main(){ int numero=123; int * puntatore; puntatore=№ cout << numero << endl; cout << *puntatore << endl; getchar(); }
123 123
Puntatore a una classe:
#include "iostream" using namespace std; class Classe{ public: int variabile; Classe(int parametro){ variabile=parametro; } void scrivi(){ cout << "scrivo" << endl; getchar(); } }; void main(){ Classe MiaClasse(234); Classe * Puntatore; Puntatore=&MiaClasse; Puntatore->scrivi(); cout << Puntatore->variabile; getchar(); }
scrivo 234
Vediamo di studiare quello strano tipo di puntatori...
Innanzitutto bisogna attivare il cosiddetto CLI.
Per farlo, devo aprire un progetto CLR.
Ecco: creo un puntatore "tradizionale":
// test1 CLR.cpp : file di progetto principale. #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { int numero=123; int * puntatore = № Console::WriteLine(numero); Console::WriteLine(*puntatore); Console::Read(); return 0; }E funziona, regolarmente:
123 123Adesso vediamo di creare quell'altro genere di puntatori...
#include "stdafx.h" using namespace System; int main() { int numero=135; int ^ puntatore; puntatore=numero; Console::WriteLine(numero); Console::WriteLine(puntatore); Console::Read(); }
135 135Sì.
Adesso confrontiamolo con il classico modo di creare un puntatore e assegnargli l'indirizzo di una variabile:
#include "stdafx.h" using namespace System; int main(){ int numero=135; int ^ puntatore; puntatore=numero; int *puntatoreTrad; puntatoreTrad=№ Console::WriteLine("Puntatore Handle"); Console::WriteLine(numero); Console::WriteLine(puntatore); Console::WriteLine(""); Console::WriteLine("Puntatore tradizionale"); Console::WriteLine(numero); Console::WriteLine(*puntatoreTrad); Console::Read(); }
Puntatore Handle 135 135 Puntatore tradizionale 135 135Sì, corrisponde perfettamente.
Adesso allochiamo dinamicamente la memoria:
#include "stdafx.h" using namespace System; int main(){ int * puntatore=new int(123); int ^ puntatoreNuovo=gcnew int(123); Console::WriteLine(*puntatore); Console::ReadLine(); Console::WriteLine(puntatoreNuovo); Console::ReadLine(); }
123 123Sì: per allocare dinamicamente la memoria è necessario usare l'operatore gcnew.
Nessun commento:
Posta un commento