Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Puntatori
Forum - Pascal - Puntatori

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Ocentral (Normal User)
Pro


Messaggi: 86
Iscritto: 25/12/2009

Segnala al moderatore
Postato alle 14:58
Lunedì, 22/03/2010
MA quando si usa ^ per i puntatori?

Grazie

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:57
Lunedì, 22/03/2010
Il simbolo ^, è appunto il simbolo per identificare i puntatori.

La sintassi per l' utilizzo è la seguente:

Per la dichiarazione (dichiaro un puntatore integer: )
Codice sorgente - presumibilmente Pascal

  1. var i:^integer; {dichiarazione di un puntatore integer}
  2.      d:integer;



Per l' utilizzo:

Codice sorgente - presumibilmente Plain Text

  1. ...
  2.  i:=@d; {assegno ad i l' indirizzo di d}
  3.  i^:=500; {memorizzo nell' area di memoria puntata da i 500}
  4.           {notare che il simbolo ^ va dopo il nome della variabile}
  5.  writeln('d= ',d);
  6.  ...


Ultima modifica effettuata da Poggi Marco il 22/03/2010 alle 19:59
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:38
Lunedì, 22/03/2010
In pascal a che servono i puntatori?

PM Quote
Avatar
Progman-92 (Member)
Expert


Messaggi: 368
Iscritto: 16/12/2007

Segnala al moderatore
Postato alle 15:11
Martedì, 23/03/2010
Ti consiglio di leggere questo capitolo della mia guida: http://www.progman92.altervista.org/guide/pascal/33.php

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:20
Martedì, 23/03/2010
Testo quotato

Postato originariamente da Giarados:

In pascal a che servono i puntatori?



I puntatori sono un potente strumento per ottimizzare l' uso della memoria.

Con essi ad esempio è possibile la gestione dinamica della RAM, e l' implementazione delle strutture dati (liste, alberi, grafi ecc.)

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 17:44
Venerdì, 26/03/2010
Come faccio a ridimensionare un puntatore, senza cambiarlo.

In un programma ho scritto:
(p : pchar)
(dimres : longint(è minore della dimensione attuale di P))

getmem(P,dimres);

ma poi P non contiene più il contenuto di prima.
A me interessa tagliare via l'ultima parte.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:46
Venerdì, 26/03/2010
Non ho ben capito il tuo problema. Ad ogni modo, GetMem alloca dinamicamente un' area di memoria, e salva l' inizio sulla variabile puntatore.
Se utilizzi GetMem per riallocare un puntatore, l' area di memoria precedentemente allocata, non è più raggiungibile o riutilizzabile.

Per liberare la memoria allocata con GetMem, esiste il comando
FreeMem( <puntatore>, <dimensione> ).

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 20:19
Martedì, 30/03/2010
Devo aumentare la dimensioni senza perdere la memoria

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:53
Mercoledì, 31/03/2010
Se usi Free Pascal, allora puoi utilizzare la libreria cmem.

In essa sono presenti le seguenti funzioni:

_ malloc( <dimensione> ) serve ad allocare uno spazio predefinito di memoria.

- free( <puntatore> ) rilascia la memoria allocata.
  (usa questa procedura solo se la memoria è stata allocata con malloc, calloc o
   realloc)

- Realloc( <puntatore>, <nuova dimensione> ) Funzione che ridefinisce una nuova area
  di memoria, e salva i dati allocati nel puntatore passato per argomento.

Ecco un breve programma d' esempio:

Codice sorgente - presumibilmente Delphi

  1. program pun;
  2. uses crt, cmem;
  3. var i:word;
  4.     p:^word;
  5.  
  6. begin
  7.  p:=NIL;
  8.  p:=malloc(10*sizeof(word)); // alloca lo spazio per 10 word
  9.  i:=58;
  10.  (p+3)^:=i;
  11.  writeln('Puntatore: ',(p+3)^);
  12.  p:=realloc(p, 25*sizeof(word)); // ridimensiona l' area di memoria.
  13.  writeln('Puntatore: ',(p+3)^);
  14.  free(p);
  15. end.


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo