Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] comprensione ruolo puntatore in funzione e procedura

    Ho difficoltà a comprendere cosa fanno i puntatori nella seconda funzione cancellaLibriCostosi.
    In paricolare:
    -perchè in entrambe le funzioni scrive (Lista...) nel passaggio dei parametri?
    -nella seconda usa (Lista*...) non capisco se è una dichiarazione o un passaggio di parametri, ani passaggio di puntatore
    -perchè nella funzione cancellaLibriCostosi usa sempre i puntatori e invece nella prima funzione no?
    -se nel passaggio di parametri della seconda funzione tiro via l'*, posso tirarlo via ovunque all'interno del corpo della funzione?
    Grazie

    Daniele

    codice:
    typedef
    {
           char titolo[100];
           char autore [50];
           float prezzo;
           char prestito[50];
    } Tipoinfo;
    
    typedef struct nodo
    {
            tipoinfo info;
            struct nodo* next;
    } Nodo;
    
    typedef Nodo* Lista;
    
    int contaPrestiti(Lista testa)            //funzione per contare num libri in prestito
    {
        int n=0;
        Nodo* curr=testa;
        while (curr!=NULL)
        {
               if (curr->info.prestito==VERO)
               {
                     n++;
               }
               curr=curr->next;
        }
        return n;
    }
    
    void cancellaLibriCostosi (Lista* testa)                  //funzione cancella libri prezzo>100
    {
          if(*testa!=NULL)
          {
                 if((*testa)->info.prezzo>100)
                 {
                       Nodo* temp=*testa;
                       *testa=(*testa)->next;
                       free(temp);
                       cancellaLibriCostosi (testa);
                 }
                 else
                       cancellaLibriCostosi(&((*testa)->next));
          }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Premesso che hai scritto

    typedef Nodo* Lista;

    ne discende che

    Lista è un tipo "puntatore a Nodo" e

    Lista * è un doppio puntatore a Nodo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio

    typedef Nodo* Lista;

    ne discende che

    Lista è un tipo "puntatore a Nodo" e

    Lista * è un doppio puntatore a Nodo.
    è un esercizio svolto e non riesco proprio a capire questa parte, cioè del bisogno di
    typedef Nodo* Lista;
    e poi di Lista* che come giustamente dici tu, diventa un doppio puntatore...
    Qualcuno ha qualche idea?
    Vi ringrazio

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Il doppio puntatore è necessario per poter modificare il puntatore nella linea

    *testa=(*testa)->next;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.