Question à propos d'un tuto
Fermé
lulz
-
18 nov. 2012 à 11:21
totof31 Messages postés 163 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 30 avril 2013 - 22 nov. 2012 à 23:02
totof31 Messages postés 163 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 30 avril 2013 - 22 nov. 2012 à 23:02
A voir également:
- Question à propos d'un tuto
- Tuto chromecast - Guide
- Tuto tableau croisé dynamique - Guide
- Tuto rufus windows 11 - Guide
- Convertisseur youtube en mp3 tuto - Guide
- Tuto opencore legacy patcher - Accueil - MacOS
2 réponses
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 19/11/2012 à 18:21
Modifié par Hxyp le 19/11/2012 à 18:21
Bonjour,
«Pourquoi, un pointeur est-il utilisé et non pas juste une chaine de caractere ?»
on peut placer une adresse dans la variable donnee, une adresse retournée par un malloc ou calloc (ou autre...) qui permet donc de pointer sur un bloc de bytes pouvant servir de tableau de char pour contenir une chaîne de caractères.
Comme je l'ai dis au dessus la variable donnee peut recevoir une adresse. Ici on peut voir qu'elle reçoit une adresse du début d'un bloc de taille 50 char, donnee pointe alors sur un "tableau" de 50 char en mémoire. On peut l'utiliser comme si c'était un :
Le scanf serait possible, un truc dans le genre :
«Pourquoi, un pointeur est-il utilisé et non pas juste une chaine de caractere ?»
char *donnee;
on peut placer une adresse dans la variable donnee, une adresse retournée par un malloc ou calloc (ou autre...) qui permet donc de pointer sur un bloc de bytes pouvant servir de tableau de char pour contenir une chaîne de caractères.
if ((nouveau_element->donnee = (char *) malloc (50 * sizeof (char))) == NULL)
Comme je l'ai dis au dessus la variable donnee peut recevoir une adresse. Ici on peut voir qu'elle reçoit une adresse du début d'un bloc de taille 50 char, donnee pointe alors sur un "tableau" de 50 char en mémoire. On peut l'utiliser comme si c'était un :
char donnee[50];
Le scanf serait possible, un truc dans le genre :
scanf("%50s",donnee);
totof31
Messages postés
163
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
30 avril 2013
74
22 nov. 2012 à 08:34
22 nov. 2012 à 08:34
Pour être parfaitement générique, on aurait pu remplacer
char *donnee;
par
void *donnee;
Ainsi, grâce à malloc, on alloue en fonction du besoin la place nécessaire, qui peut être comme ici une chaine de caractère, ou un entier, un flottant, un tableau de ce qu'on veut, ou une structure complexe, ou un tableau de structure, etc.
char *donnee;
par
void *donnee;
Ainsi, grâce à malloc, on alloue en fonction du besoin la place nécessaire, qui peut être comme ici une chaine de caractère, ou un entier, un flottant, un tableau de ce qu'on veut, ou une structure complexe, ou un tableau de structure, etc.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
22 nov. 2012 à 20:18
22 nov. 2012 à 20:18
Avec un char* donnee, tu peux très bien utiliser malloc sans cast vu que malloc retourne déjà un void*.
Ou alors j'ai pas compris ce que tu voulais dire...
Ou alors j'ai pas compris ce que tu voulais dire...
totof31
Messages postés
163
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
30 avril 2013
74
22 nov. 2012 à 23:02
22 nov. 2012 à 23:02
Oui, on peut très bien utiliser un pointeur de ce qu'on veut d'ailleurs.
Ce que j'essayai de faire comprendre (très maladroitement, je m'en accuse), c'était le caractère abstrait de la chose : une liste chainée peut concerner n'importe quel type de données... et réciproquement, quand on écrit du code générique on utilise plutôt void *
Ai-je été plus clair ? Ou je m'embrouille encore ?...
Ce que j'essayai de faire comprendre (très maladroitement, je m'en accuse), c'était le caractère abstrait de la chose : une liste chainée peut concerner n'importe quel type de données... et réciproquement, quand on écrit du code générique on utilise plutôt void *
Ai-je été plus clair ? Ou je m'embrouille encore ?...
19 nov. 2012 à 19:46