Langage c: malloc pointeur vers un pointeur??
Fermé
sassah
-
18 juin 2011 à 15:34
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 juin 2011 à 11:28
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 juin 2011 à 11:28
A voir également:
- Langage c: malloc pointeur vers un pointeur??
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Delphi (langage) - Télécharger - Langages
3 réponses
Personne? Je vous en prie, ça me torture l'esprit. Pourquoi fait on une conversion explicite alors qu'on sait que nb est un tableau qui contiendra des adresses contenant des int ??
Please please please!!!
Please please please!!!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
18 juin 2011 à 18:03
18 juin 2011 à 18:03
Bonjour sassah,
Un peu de patience est la bienvenue...
Pour la question, ce n'est pas par rapport au type de la variable "nb" qu'il faut se reporter, mais au type du retour de la fonction malloc (void *).
Le pointeur générique void* sera converti automatiquement en int*. Le cast est donc superflu. Par ailleurs, il vaut même mieux le retirer puisque dans certaine version de compilateur, il masque l'erreur fréquente qui consiste à oublier "#include <stdlib.h>".
Alors pourquoi on le met ? Car historiquement (en C K&R), malloc retournait un char* et la conversion nécessitait le cast. Depuis ce temps, certains ont pris l'habitude de le laisser, d'autres se sont mis à jour des normes ISO. En tout cas, le cast n'apporte absolument rien.
Cdlt,
Un peu de patience est la bienvenue...
Pour la question, ce n'est pas par rapport au type de la variable "nb" qu'il faut se reporter, mais au type du retour de la fonction malloc (void *).
Le pointeur générique void* sera converti automatiquement en int*. Le cast est donc superflu. Par ailleurs, il vaut même mieux le retirer puisque dans certaine version de compilateur, il masque l'erreur fréquente qui consiste à oublier "#include <stdlib.h>".
Alors pourquoi on le met ? Car historiquement (en C K&R), malloc retournait un char* et la conversion nécessitait le cast. Depuis ce temps, certains ont pris l'habitude de le laisser, d'autres se sont mis à jour des normes ISO. En tout cas, le cast n'apporte absolument rien.
Cdlt,
Merci pour la réponse.
Un prof m'a dit que, contrairement à ce que tu as dit, le fait de mettre cette conversion explicite permet de détecter facilement les erreurs. Ce qui fait que dans certains cas, comme par exemple pour allouer de la mémoire à une variable de type struct, souvent on le fait.
Je ne sais pas vraiment laquelle prendre parmi vos réponses.
En tout cas, je sais donc que avec ou sans ne change en (presque) rien le but de l'instruction.
Un prof m'a dit que, contrairement à ce que tu as dit, le fait de mettre cette conversion explicite permet de détecter facilement les erreurs. Ce qui fait que dans certains cas, comme par exemple pour allouer de la mémoire à une variable de type struct, souvent on le fait.
Je ne sais pas vraiment laquelle prendre parmi vos réponses.
En tout cas, je sais donc que avec ou sans ne change en (presque) rien le but de l'instruction.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
Modifié par fiddy le 19/06/2011 à 11:33
Modifié par fiddy le 19/06/2011 à 11:33
Beaucoup de prof ont appris le C K&R et ne sont malheureusement pas à jour avec la norme ISO...
Le type de malloc est void* et cela assure automatiquement le cast. Il est de fait facultatif.
Avec ou sans, ça ne change rien du tout. Même s'il est conseillé de ne pas le mettre. Mais après, le mieux est soit de convaincre sa prof, soit de l'écouter car c'est elle qui te note après tout ^^.
Le type de malloc est void* et cela assure automatiquement le cast. Il est de fait facultatif.
Avec ou sans, ça ne change rien du tout. Même s'il est conseillé de ne pas le mettre. Mais après, le mieux est soit de convaincre sa prof, soit de l'écouter car c'est elle qui te note après tout ^^.