PDA

Visualizza la versione completa : [C] Spiegazione teorica su uso di "typedef"


UltraBeginner
22-11-2006, 17:34
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!

oregon
22-11-2006, 17:52
Non vedo differenze e la malloc vuole *sempre* il cast ...

UltraBeginner
22-11-2006, 18:02
Guarda allora proprio non capisco...

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



#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=malloc( sizeof(Auto));
Curr=Head;
while(strcmp(numero,"0")!=0)
{
strcpy(Curr->numero,numero);

Prev=Curr;
Curr=malloc( sizeof(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;
}
}
:bh: :bh: :bh:

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! :) :)

Loading