Restituire indirizzo di un record

di il
3 risposte

Restituire indirizzo di un record

Salve, è possibile restituire l'indirizzo di una struttura dati in una funzione? Grazie.
Ecco una bozza di quello che ho provato a fare che però non funziona.

int RicercareStudente(VettoreStudenti elenco, Studente studente_cercato, int parametro){
	Studente trovato;
	int i;
	int j = 0;
	int bool = 0;
	int indirizzo;
	i = LeggereDimensioneVettoreStudenti(elenco);
	while(j <= i && bool == 0){
		if (parametro == 1){
			if (LeggereMatricolaStudente(*(elenco.ElencoStudenti + j)) == (studente_cercato.matricola)){
				trovato = *(elenco.ElencoStudenti + j);
				bool = 1;
			}
		}else if (parametro == 2){
			if (strcmp(LeggereNominativoStudente(*(elenco.ElencoStudenti + j)), LeggereNominativoStudente(studente_cercato)) == 0){
				trovato = *(elenco.ElencoStudenti + j);
				bool = 1;
			}
		}
		j++;
	}
	if (bool == 0){
		indirizzo = NULL;
	}else if(bool == 1){
		indirizzo = &trovato
	}
	return indirizzo;
}

3 Risposte

  • Re: Restituire indirizzo di un record

    Il tuo codice pecca in qualche punto:
    1) Manca un ; dopo indirizzo = &trovato.
    2) Utilizza una variabile di tipo bool al posto di un int, in questo caso stai sprecando memoria. (bool = 8bit; int = 32bit)
    3) Per restituire un indirizzo di memoria non puoi dichiarare la funzione int, ma int*, dato che sarà un puntatore. In alternativa, puoi istanziare una serie di variabili int nel main e passare quell'indirizzo, cosa che ti permetterà di gestire al meglio gli indirizzi componenti la struttura dati, senza istanziare 2 puntatori.
  • Re: Restituire indirizzo di un record

    Ho provato a mettere l'asterisco ma ho i seguenti warning:
    (per ora ho lasciato la variabile int bool)
    int *RicercareStudente(VettoreStudenti elenco, Studente studente_cercato, int parametro){
    	Studente trovato;
    	int i;
    	int j = 0;
    	int bool = 0;
    	int indirizzo;
    	i = LeggereDimensioneVettoreStudenti(elenco);
    	while(j <= i && bool == 0){
    		if (parametro == 1){
    			if (LeggereMatricolaStudente(*(elenco.ElencoStudenti + j)) == (studente_cercato.matricola)){
    				trovato = *(elenco.ElencoStudenti + j);
    				bool = 1;
    			}
    		}else if (parametro == 2){
    			if (strcmp(LeggereNominativoStudente(*(elenco.ElencoStudenti + j)), LeggereNominativoStudente(studente_cercato)) == 0){
    				trovato = *(elenco.ElencoStudenti + j);
    				bool = 1;
    			}
    		}
    		j++;
    	}
    	if (bool == 0){
    		indirizzo = NULL;                    <----------warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    	}else if(bool == 1){
    		indirizzo = &trovato;              <-----------warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    	}
    	return indirizzo;                             <-----------warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    }
  • Re: Restituire indirizzo di un record

    Ciao, i warning sono causati dal fatto che stai assegnando una variabile di tipo Studente ad un int. Sul return da lo stesso warning perchè il compilatore si aspetta che la funzione ritorni un puntatore ad int e quindi prova a fare un cast. Se dove ritornare il puntatore alla struttura, la funzione dovrebbe avere come tipo di ritorno Studente * ricercaStudente(...), sostituendo la l'istruzione return con : return &trovato; e return NULL; (la variabile indirizzo non ti serve realmente)
Devi accedere o registrarti per scrivere nel forum
3 risposte