Puntatori

di il
7 risposte

Puntatori

Buongiorno a tutti. Ho un dubbio sull'assegnazione di strutture mediante puntatori. Ho due strutture del tipo:
struct iscritto 
{
    char nome[20];
    char cognome[30];
    int eta;
};

struct club
{
    char denominazione[30];
    struct iscritto in[100];
    int n;
};
Devo creare una funzione che, dato l'indirizzo di un club e l'indirizzo di un iscritto, inserisci nell'indirizzo dell'iscritto la persona più vecchia all'interno del club.
void piuvecchio(struct club *c, struct iscritto *v)
{
    int i, max=0;
    for(i=0; i<c->n; i++)
    {
        if(c->in[i].eta>max)
        {
            *v = &c->in[i];
            max = c->in[i].eta;
        }
    }
}
E' corretta l'istruzione: *v = &c->in; ?

Grazie in anticipo per la risposta!

7 Risposte

  • Re: Puntatori

    No, non è corretta e te ne accorgeresti anche compilando.

    Ma cosa vorresti fare con quella linea?

    P.S. magari un titolo migliore per il thread non sarebbe stato male
  • Re: Puntatori

    È un esercizio per un esame universitario.
    Come potrei modificarlo per correggerlo?
  • Re: Puntatori

    Le strutture sono definite dalla traccia? Di preciso qual è la traccia?
  • Re: Puntatori

    Ciaobello00 ha scritto:


    È un esercizio per un esame universitario.
    Come potrei modificarlo per correggerlo?
    Ma cosa vuoi fare con quella linea??
  • Re: Puntatori

    Con quella linea voglio copiare l'utente del club più vecchio dentro all'iscritto v.

    La traccia non dice altro. La funzione non la devo neanche chiamarla nel main.

    Questo tipo di situazione capita spesso e non so come assegnare correttamente una struttura ad un altra dello stesso tipo avendo una funzione che chiamata nel main è del tipo:
    piuvecchio(&c, &v);
  • Re: Puntatori

    Ciao.
    * viene utilizzato per dereferenziare un determinato valore, mentre & serve per referenziare un valore.
    Nel tuo codice, tu stai cercando di assegnare un valore che sarebbe l'indirizzo dell'iscritto a v, che siccome è stato dereferenziato con * si aspetta una struttura di tipo iscritto, non un indirizzo
    Puoi risolvere il problema in 2 modi
    1.
    
        *v = c->in[i];
    
    In questo modo assegneresti al valore dereferenziato la struttura che vorresti copiare.
    2.
    
        v = &c->in[i];
    
    Facendo così, invece paseresti l'indirizzo della struttura che desideri ottenere al puntatore.
    Spero di non averti confuso ulteriormente.
  • Re: Puntatori

    Perfetto ora è tutto chiaro! Ti ringrazio molto
Devi accedere o registrarti per scrivere nel forum
7 risposte