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

    [C] Typedef(spiegazione teorica)

    Ciao a tutti,

    qualcuno mi riesce a spiegare la differenza tra queste due forme di typedef?

    1)
    struct automobile //struttura accessori
    {
    int num;
    struct automobile *next;
    };

    typedef struct automobile Auto;
    typedef Auto *Ptr;

    int main()
    {
    Ptr Head,Curr,Prev;
    Head=malloc( sizeof(Auto));
    }


    2)
    typedef struct t_automobile //struttura accessori
    {
    int num;
    struct t_automobile *next;
    }Auto,*Ptr;

    int main()
    {
    Ptr Head,Curr,Prev;
    Head=(Head)malloc( sizeof(Auto));

    }

    Come vedete sono molto simili, ma nella seconda la malloc vuole perforza il cast mentre nella prima no...perche? Inoltre adottando il metodo 1) il programma delle liste funziona perfettamente.........cosa ce quindi di sbagliato nel numero 2)? Grazie dell aiuto!

    Saluti!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,302
    Non vedo differenze e la malloc vuole *sempre* il cast ...

  3. #3

    mha

    Guarda allora proprio non capisco...

    questo codice non da nemmeno un worning e tra l altro funziona perfettamente

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct automobile  //struttura accessori
     
    {
       
    char numero[20];
       
    struct accessorio *pointer;
       
    struct automobile *next;
     };
     
    typedef struct automobile Auto;
    typedef Auto *Ptr;


       
    int main()
    {

     
    FILE *fptr;
     
    int i;
     
    char numero[20];
     
     
    Ptr Head,Curr,Prev;
     
     
    fptr=fopen("c:\\lista.txt","w");
     
     
    printf("Inserire una stringa (0 end):");
     
    scanf("%s",numero);
     
     
    Head=mallocsizeof(Auto));
     
    Curr=Head;
     while(
    strcmp(numero,"0")!=0)
      {
        
    strcpy(Curr->numero,numero);
        
        
    Prev=Curr;
        
    Curr=mallocsizeof(Auto));
        
    Prev->next=Curr;   
        
        
    printf("Inserire numero (0 end):");
        
    scanf("%s",numero);
      }
    free(Curr);
    Prev->next=NULL

    Curr=Head;

    while(
    Curr!=NULL)
    {
     
    fprintf(fptr,"%s\n",Curr->numero);
     
    Curr=Curr->next;
    }



    Bhe d ora in poi usero sempre il metodo 1) (anke se identico al 2) ) almeno sono certo ke funziona! Per lo meno ho avuto la certezza da un esperto che i due metodi sono equivalenti...era due giorni che ci stavo perdendo la testa! Grazie mille!

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 © 2020 vBulletin Solutions, Inc. All rights reserved.