Si vous aimez le "don't repeat yourself" état d'esprit, il doit être attrayant que vous n'avez pas besoin de répéter le nom du type de la déclaration de la variable, en malloc()
appel. Parce que, comme les gens l'ont souligné, vous n'avez pas: les pointeurs convertir void *
sans perte, à l'exception des pointeurs de fonction.
Aussi, sur cette note, vous n'avez pas besoin de répéter vous-même avec l'utilisation de l' sizeof
. Votre deuxième exemple, lors de l'affectation de la structure, peut être écrite comme ceci:
struct node *temp;
temp = malloc(sizeof *temp);
Qui, dans mon pas si humble avis c'est le meilleur moyen.
En évitant de se répéter, réduit le nombre de choses que vous écrivez, qui, à son tour, réduit le risque que l'une de ces choses sont fausses.
Note de l'astérisque dans l' sizeof
argument, ce qui signifie "la taille de l'objet pointé par le pointeur", ce qui est évidemment le même que "la taille du type struct node
" mais sans répéter le nom du type. C'est parce qu' sizeof
calcule (au moment de la compilation!) la taille de l'expression qui est son argument. Pour ce cas. Tout comme sizeof 3
calcule la taille d'une expression de type int
, sizeof *temp
calcule la taille d'une instance de struct node
.
Bien sûr, vous ne répétez quelque chose, c'est à dire le nom de la variable elle-même, mais c'est souvent plus simple expression et la plus facile pour obtenir le droit, et peut également être plus facile pour le compilateur de repérer une erreur.