Autore Topic: puntatori e funzioni in C  (Letto 2765 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
puntatori e funzioni in C
« il: 29 Maggio 2009, 21:40:41 »
Dato che vorrei capire come sono fatti i componenti di gambas sto leggendo n bel libricino di C.
Ora, si parla di puntatori (argomento per me ostigo).
Quando si usano?
Poi che differenza c'è tra un puntatore a funzione ed una funzione?
So che un puntatore è praticamente una variabile che contiene l'indirizzo in memoria...quindi io posso cambiare il suo valore tanto lei punta a quell'determinato posto, ma sinceramente, presa una variabile normale, io posso cambiare il suo valore quando voglio in un programma senza usare il puntatore...
Mi è poco chiaro anche questo utilizzo:
x = *puntatore => x prende il valore di puntatore (non l'indirizzo in memoria..)
puntatore = &variabile => indica il valore (il valore della sua posizione nella
                          memoria, l'indirizzo della variabile....
puntatore -> variabile => non ho capito....

ciao a tutti!

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: puntatori e funzioni in C
« Risposta #1 il: 29 Maggio 2009, 23:16:24 »
Il puntatore sostituisce in un certo senso quella che è la variabile globale....un puntatore infatti serve per modificare il dato in quello specifico indirizzo da diverse parti dal programma stesso.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: puntatori e funzioni in C
« Risposta #2 il: 08 Giugno 2009, 14:21:00 »
Il nome di una variabile, sia per il C che anche per tutti gli altri linguaggi, non è altro che un identificatore del puntatore alla zona di memoria del dato. Detto questo, se facciamo un esempio, ed utilizziamo una variabile String che contiene una determinata stringa (ovvero una sequenza di caratteri alfanumerici, ovvero una sequenza di "char"), il nome che utilizzi nella dichiarazione non è altro che un identificativo al punto iniziale in memoria dell'oggetto Stringa (forse l'esempio su String è un pò fuori ambito, dato che questo oggetto è un componente più complesso di una semplice sequenza di caratteri); in fin dei conti, non fai altro che dare un nome univoco al puntatore, rendendone più semplice la gestione all'interno del codice. In alternativa, sarebbe abbastanza complicato utilizzare l'indirizzo fisico in memoria, cosa che viene fatta dal linguaggio, sostituendo la tua variabile con l'indirizzo fisico in fase di compilazione. Inoltre la dichiarazione rende la cosa dinamica, dando al compilatore la facoltà di decidere dove posizionare l'area preposta al contenimento dell'oggetto; è ovvio pensare che se la cosa fosse fatta manualmente, sarebbe abbastanza pesante e anche piuttosto legata alla macchina su cui gira l'applicazione.
Questa cosa, anticamente, veniva fatta proprio in questo modo, ma questo sottintendeva una conoscenza profonda del sistema e dell'hardware, e una profonda attenzione all'utilizzo della memoria.