Aiuto raga.....
Ciao raga... dopo tanto tempo sono tornato con un bel questo ... vediamo chi mi aiuta....
Considerate le seguenti dichiarazioni di variabili :
int a;
int b;
int *p1=&a;
int *p2=&b;
si dica quali delle seguenti assegnazioni sono corrette e quali no :
a)* p1= *p2;
b)p1=*p2;
c)p1=p2;
d)*p2=p1;
Grazie per l'aiuto....
Considerate le seguenti dichiarazioni di variabili :
int a;
int b;
int *p1=&a;
int *p2=&b;
si dica quali delle seguenti assegnazioni sono corrette e quali no :
a)* p1= *p2;
b)p1=*p2;
c)p1=p2;
d)*p2=p1;
Grazie per l'aiuto....

Risposte
"ing_mecc":
si dica quali delle seguenti assegnazioni sono corrette e quali no :
a)* p1= *p2;
b)p1=*p2;
c)p1=p2;
d)*p2=p1;
Direi
[*:3fghzy0m] a) corretta: viene assegnato ad a il valore di b[/*:m:3fghzy0m]
[*:3fghzy0m] b) sbagliata: viene assegnato ad un puntatore un valore int invece dell'indirizzo di una variabile int[/*:m:3fghzy0m]
[*:3fghzy0m] c) corretta: viene assegnato a p2, l'indirizzo (della variabile int) contenuto in p1[/*:m:3fghzy0m]
[*:3fghzy0m] d) sbagliata: viene assegnato alla variabile di tipo int puntata da p2 non un valore int, bensì un indirizzo (del puntatore p1)[/*:m:3fghzy0m][/list:u:3fghzy0m]
Io credo che l'ultima sia corretta, nel senso che un indirizzo di memoria è fondamentalmente un intero (è un numero che indica la posizione in memoria) e quindi per la macchina stai assegnando un intero ad un intero.
Quindi credo che sintatticamente sia corretto, ma non semanticamente.
Tipica domanda bas...da da esame, per capirci
Quindi credo che sintatticamente sia corretto, ma non semanticamente.
Tipica domanda bas...da da esame, per capirci

"gigilatrottola":
Io credo che l'ultima sia corretta, nel senso che un indirizzo di memoria è fondamentalmente un intero (è un numero che indica la posizione in memoria) e quindi per la macchina stai assegnando un intero ad un intero.
Chiaro, per la macchina non hanno alcun significato tutti quei bit. E ragionando allo stesso modo sarebbero tutti assegnamenti accettabili.

scusate ma non capisco più nulla... ricapitolando ...


Ricapitolando: se è richiesto che un programma con quelle istruzioni funzioni le sole assegnazioni corrette sono la a) e c), come spiegato. Tuttavia, un compilatore "distratto" potrebbe compilare lo stesso un programma contenente le assegnazioni b) e c) e tu ti accorgeresti che qualcosa non va solo in fase di esecuzione o dai risultati ottenuti (ammesso, in questo caso, che il programma riesca a terminare con successo).
"ing_mecc":
scusate ma non capisco più nulla... ricapitolando ...![]()
Ricapitolando, se ti capitasse un esercizio del genere in un esame ed il testo non dice nulla, chiedi sempre se si intende corretto sintatticamente (il codice compila?) o corretto semanticamente (compila, ma... ha senso?) perchè ci sono linee di codice che la macchina ti accetta perchè grammaticalmente sensate, ma che in realtà non ne hanno molto.
Ad esempio la D... è uno dei tipici errori che uno fa lavorando coi puntatori e su cui perde un pomeriggio facendo debug, proprio perchè per la macchina è un'assegnazione corretta.
grazie raga..... mi avete chiarito le idee... questo era un esercizio del compito.... e come risposta ho scritto che quella giusta era la a). Speriamo vada bene... faccio l'orale e vi saprò dire.. ciauzzzzzz..
Anche la b) è corretta secondo me. In ogni caso, in bocca al lupo per domani!
