Restituire indirizzo di un record

di thomas99 il
3 risposte
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

  • 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.
  • 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]
    }
  • 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