Dans le premier cas
typedef struct {
int val;
} *Name;
le nom Name
est déclaré comme un alias pour le pointeur de type à une structure de nom.
Vous pouvez utiliser ce type de pointeur par exemple de la manière suivante
Name ptr = malloc(sizeof(*ptr));
et vous pouvez écrire par exemple
ptr->val = 10;
ou
(*ptr).val = 10;
qui se trouve dans cette déclaration il est déclaré le pointeur ptr
du type Nom et a créé dynamiquement un objet f la structure et le pointeur pointent vers cet objet créé dynamiquement.
Dans le second cas
typedef struct {
int val;
} Name;
le nom Name
est déclaré comme un alias pour la structure sans nom lui-même.
Déclarer un objet de ce type, vous pouvez simplement écrire
Name name;
puis
name.val = 10;
ou tout simplement
Name name = { 10 };
et un objet du type de structure sera créée .
Ou si vous voulez allouer un objet du type de structure que vous pouvez écrire
Name *ptr = malloc(sizeof(Name));
Pour le rendre plus clair voici dynamiquement un autre exemples d'utilisation typedef.
typedef int A[10];
ce typedef déclare le nom A
comme un alias pour le type de tableau int[10]
.
vous pouvez écrire après
A a;
Cette déclaration déclare objet tableau a
du type A
qui est équivalent à int[10]
.
Cette déclaration
typedef int (*A)[10];
déclare le nom A
comme un alias au pointeur de type à un tableau de type int[10]
.
Cette déclaration peut être utilisée par exemple de la manière suivante
int a[10];
A ptr_a = &a;
@usr, Ce n'est pas le même sujet man. –
Ce n'est pas ma question? – Lurr
D'abord 'Name' est un type qui est un pointeur une struct. Évitez de cacher un pointeur dans un type - seulement bon dans certaines circonstances – chux