Segui il video qui sotto per vedere come installare il nostro sito come web app sulla tua schermata principale.
Nota: Questa funzionalità potrebbe non essere disponibile in alcuni browser.
Pubblicità
Grazie per aver risposto, l’esame è la settimana prossima e vorrei cercare di capire sia in teoria che in pratica cosa vogliono dire questi due concetti, potresti dirmi una breve ma concreta spiegazione è un esempio di applicazione ??Dereferenziare significa accedere al dato puntato, a quella locazione di memoria. Il puntatore solitamente è un puntatore ad un tipo di dato. Questo è significa che al suo interno trovi un indirizzo di memoria (virtuale) che è quello a cui il dato risiede.
Ma hai l'esame in questi giorni? Mi auguro di no, poiché in applicativi più complicati saranno alla base questi concetti e non potrai muoverti a tentoni.
int a = 5; // dichiaro una variabile di tipo intero e la inizializzo a 5
int *ptr; // dichiaro un puntatore a intero
ptr = &a; /* con l'operatore di indirizzo & assegno al puntatore l'indirizzo di a,
* cioe' faccio puntare il puntatore ad a */
// queste due istruzioni producono lo stesso output (stampano 5):
printf("%d\n", a); // stampo il valore di a
printf("%d\n", *ptr); /* uso l'operatore di dereferenziazione * per stampare il valore
* di a, variabile puntata da ptr */
*ptr = 8; // modifico il valore di a tramite il puntatore, equivale all'istruzione a = 8;
/* immagina di voler scrivere due funzioni che effettuano una somma dei due operandi,
* nella prima usi il passaggio per valore, nella seconda, quello per riferimento con i puntatori
*/
int x = 3;
int y = 5;
int s1, s2;
s1 = somma_val(x, y); // chiamata con passaggio per valore
s2 = somma_rif(&x, &y); /* chiamata con passaggio per riferimento, uso l'operatore &
* per passare gli indirizzi delle due variabili
*/
// funzione che prende due variabili passate per valore e restituisce la loro somma
int somma_val(int a, int b) {
return a + b;
}
// funzione che prende due variabili passate per riferimento e restituisce la loro somma
int somma_rif(int *a, int *b) { // prende in input due puntatori, cioè due indirizzi, in pratica
return *a + *b; /* per questa ragione uso l'operatore *, perche' se scrivessi a+b
* sommerei gli indirizzi, non i dati */
}
int *ptr; // dichiaro un puntatore a intero
*ptr = 4; /* modifico il valore della locazione di memoria puntata. Attenzione:
* e' una locazione casuale, e porta a un comportamento indefinito del programma,
* con possibili errori, perche' magari si modifica una locazione che appariene a una variabile,
* o perche' si tenta di accedere ad aree di memoria cui non e' consentito accedere */
Grazie mille Fabio, ho le idee molto più chiare ed ho capito che era 7n operazione che già sapevo eseguire solo che non avevo idea si chiamasse così. Grazie ancoraUn puntatore è una variabile particolare che anziché contenere un valore di un certo tipo (int, float, char, ecc) contiene l'indirizzo di un'altra variabile. Per cui ad esempio, in linguaggio C, un puntatore a integer (che si dichiara con int *nome_puntatore;) è una variabile che può contenere (solo) indirizzi di variabili di tipo integer. Naturalmente, come ogni altra variabile, anche i puntatori, se non inizializzati, contengono valori casuali, e questo bisogna tenerlo presente quando li si dereferenzia, cioè quando si accede alla variabile puntata tramite il puntatore stesso. In C l'operatore di dereferenziazione è il carattere *. Quindi dereferenziare un puntatore significa accedere, tramite esso, alla variabile puntata. Per referenza penso tu intenda l'uso dell'operatore di indirizzo, & in C, che serve a ricavare l'indirizzo di una variabile per assegnarlo a un puntatore (e quindi per far puntare il puntatore a quella variabile). Si usa anche per passare un parametro a una funzione/procedura mediante riferimento (o referenza, appunto). Ti mostro degli esempi.
abc dei puntatori:
Passaggio di parametri per riferimento con i puntatori:C:int a = 5; // dichiaro una variabile di tipo intero e la inizializzo a 5 int *ptr; // dichiaro un puntatore a intero ptr = &a; /* con l'operatore di indirizzo & assegno al puntatore l'indirizzo di a, * cioe' faccio puntare il puntatore ad a */ // queste due istruzioni producono lo stesso output (stampano 5): printf("%d\n", a); // stampo il valore di a printf("%d\n", *ptr); /* uso l'operatore di dereferenziazione * per stampare il valore * di a, variabile puntata da ptr */ *ptr = 8; // modifico il valore di a tramite il puntatore, equivale all'istruzione a = 8;
Tentativo di dereferenziare un puntatore non inizializzato:C:/* immagina di voler scrivere due funzioni che effettuano una somma dei due operandi, * nella prima usi il passaggio per valore, nella seconda, quello per riferimento con i puntatori */ int x = 3; int y = 5; int s1, s2; s1 = somma_val(x, y); // chiamata con passaggio per valore s2 = somma_rif(&x, &y); /* chiamata con passaggio per riferimento, uso l'operatore & * per passare gli indirizzi delle due variabili */ // funzione che prende due variabili passate per valore e restituisce la loro somma int somma_val(int a, int b) { return a + b; } // funzione che prende due variabili passate per riferimento e restituisce la loro somma int somma_rif(int *a, int *b) { // prende in input due puntatori, cioè due indirizzi, in pratica return *a + *b; /* per questa ragione uso l'operatore *, perche' se scrivessi a+b * sommerei gli indirizzi, non i dati */ }
C:int *ptr; // dichiaro un puntatore a intero *ptr = 4; /* modifico il valore della locazione di memoria puntata. Attenzione: * e' una locazione casuale, e porta a un comportamento indefinito del programma, * con possibili errori, perche' magari si modifica una locazione che appariene a una variabile, * o perche' si tenta di accedere ad aree di memoria cui non e' consentito accedere */
Mi scuso se non ti ho più risposto, ma sono tornato tardi da lavoro e mi ero scordato di dare un occhiata al forum. ;)Grazie per aver risposto, l’esame è la settimana prossima e vorrei cercare di capire sia in teoria che in pratica cosa vogliono dire questi due concetti, potresti dirmi una breve ma concreta spiegazione è un esempio di applicazione ??
Grazie in anticipo