Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152

    [C] puntatori e definizioni

    ciao a tutti ho una struttura cosi definita

    codice:
    typedef struct elem{
                  int info;
                  struct elem *next;
                  }elist;
    
    typedef elist* plist;
    l'esercizio in particolare chiede di creare una lista casuale di numeri interi compresi fra 0 e 1, il che non è un problema... ma ho notato che sulle dispense il professore spesso dichiara metodi come "InserisciInTesta(plist *p, int n)"
    oppure "inserisciInCoda(plist *p,int n)"
    non capisco se si è confuso con questo plist *p oppure se ha un significato particolare... cioè un puntatore di un puntatore... qualcuno sa levarmi questo dubbio?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ho capito bene il problema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    cerco di spiegarmi meglio...
    ho una struttura di nome elist e ho definito il suo puntatore, chiamandolo plist
    quindi se scrivo plist p questo equivale a elist *p

    ho notato che, nonostante questa definizione, chi ha scritto il programma usa dichiarazioni come plist *p.
    La mia domanda è:
    Ha un significato questo plist *p?
    oppure si è semplicemente sbagliato per cui bastava dichiarare plist p?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    plist *p

    è un doppio puntatore, ma se si è sbagliato e intendeva scrivere

    plist p

    chi può saperlo se non si esamina il resto del codice e come viene usato p?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    ho notato che questo plist *p viene usato per la modifica della lista ti copio un pezzetto di codice

    codice:
    // funzione per inserire in testa ad una lista un nuovo nodo
    void inserisciInTesta(plist* l, char n){
     plist temp = (plist)malloc(sizeof(elist));
     temp->info = n;
     temp->next = *l;
     *l = temp;
    }
    
    //funzione per inserire in coda ad una lista un nuovo nodo
    void inserisciInCoda(plist* l, int n){
     plist temp = (plist)malloc(sizeof(elist));
     temp->info = n;
     temp->next = NULL;
     if (*l == NULL) *l = temp;
     else {
         plist temp2 = *l;
         while (temp2->next != NULL)
               temp2 = temp2->next;
         temp2->next=temp;
      }
    }

    mentre appare plist p quando ,per esempio, deve stampare su video o fare delle operazioni che non modificano la lista

    codice:
    int confrontaDNA(plist L1, plist L2, int t) {
    int DIM1 = lungLista(L1);  
    int DIM2 = lungLista(L2);
    
    t = t - abs(DIM1-DIM2);
    
    while ((t >= 0) && ((L1!=NULL) && (L2!=NULL))) {
          if (L1->info != L2->info) t--;       
          L1 = L1->next; L2 = L2->next;
          }
    return (t >= 0);
        
    }

    inizio a pensare questo plist *p, essendo un puntatore di un puntatore sia necessario per la modifica della lista...
    e che quindi non basti scrivere plist p

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    ho scritto plist *p ma lui spesso usa plist *l spero sia chiaro uguale...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' un doppio puntatore ed è corretto perché per modificare il puntatore alla lista hai bisogno di un puntatore a tale puntatore.
    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.