![]() | ![]() |
|
|
I PUNTATORI
Alle funzioni si possono passare parametri per valore o per reference (indirizzo).
Passaggio per valore
Il passaggio per valore consiste nel copiare i valori dei parametri attuali (della funzione chiamante) nei parametri formali (del sottoprgramma chiamato): abbiamo quindi due celle di memoria distinte per le due variabili. I parametri formali, al termine della funzione, ven 212e43c gono cancellati e il loro valore perso se non c'è nessun return e non c'è nessun cambiamento dei parametri attuali, anche se nella funzione cambiano quelli formali, perché sono situati in celle di memoria diverse.
Passaggio per reference (o indirizzo)
In questo tipo di passaggio i parametri attuali e formali fanno riferimento alla stessa cella di memoria quindi, eventuali variazioni del valore dei parametri nel sottoprogramma chiamato si ripercuotono anche nella variabile del chiamante.
Questo metodo è molto utile principalmente in due casi:
Per quanto riguarda il passaggio di array e struct questo avviene sempre per indirizzo.
Queste variabili, che contengono solo un indirizzo di memoria non un valore, vengono chiamate puntatori.
I PUNTATORI NEL LINGUAGGIO C
Dichiarazione e inizializzazione di una variabile di tipo puntatore
Il tipo indicato in una variabile puntatore coincide con quello della variabile da puntare.
La sintassi è la seguente:
TipoVariabilePuntata *nomePuntatore;
Per inizializzare la var puntatore all'indirizzo di memoria della variabile puntata si utilizza l'operatore "&". Prima dell'inizializzazione il suo valore è NULL.
varPuntatore=&varPuntata;
Esempio:
il puntatore p è allocato all'indirizzo 00CF e contiene come valore 0ABF. 0ABF è l'indirizzo di memoria della var che p punta.
L'operatore di indirezione asterisco*
L'operatore * serve per accedere al contenuto della variabile puntata. Deve sempre precedere il nome del puntatore.
Esempio:
int var=3;
int p=*var;
printf("%d", *p); // stampa il valore di var quindi 3
printf("%d", p); //visualizza il contenuto di p ovvero un indirizzo di memoria
Questo operatore si utilizza nella dichiarazione di un puntatore (anche per i parametri formali) e per accedere al valore della variabile puntata.
L'operatore e-commerciale &
L'operatore & serve per riferirsi ad un indirizzo di memoria.
Si utilizza:
NB: l'operazione &var=15; è assolutamente illegale in quanto significherebbe cercare di variare un indirizzo di memoria.
PROBLEMA
Visualizzare la dimensione di uno struct, i valori dei suoi campi e l'indirizzo di memoria dove sono allocate tali variabili.
ANALISI del CODICE
Si deve innanzitutto creare lo struct ed inizializzarlo.
Per visualizzare la dimensione in byte di un elemento si utilizza l'istruzione sizeof(elemento).
Per visualizzare l'indirizzo di una cella di memoria si utilizza lo specificatore di formato "%p" perché è in esadecimale.
CODIFICA
//LIBRERIE
#include <stdio.h>
//COSTANTI
#define max 5
#define maxCHAR 10
//Nuovi tipi: RECORD
struct tipo
struct tipo variabileStruct[max]=
,
,
,
int main()
Dalla tabella si può notare che ciascun elemento dista dal precedente un numero di byte pari alla sua dimensione.
PROBLEMA
Scambiare due variabili usando i puntatori.
ANALISI
Si deve costruire una funzione scambia che, ricevendo in ingresso due variabili puntatori, permetta di scambiare i dati.
Per la chiamata si passano come variabili i due numeri letti preceduti da & per indicare che si passa il loro indirizzo nel parametro formale.
Nel prototipo e nella riga di interfaccia i puntatori sono preceduti da *.
Durante le operazioni i puntatori sono sempre preceduti da * per indicare l'accesso diretto alla variabile da loro puntata.
CODIFICA
#include <stdio.h>
//PROTOTIPI
void scambia(int *, int *); //* parametri formali = puntatori
int main ()
void scambia(int *x, int *y)
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025