Différence entre pointeur et tableau, allocation dynamique et statique

Différence entre pointeur et tableau, allocation dynamique et statique - C - Programmation

Marsh Posté le 26-03-2009 à 18:35:47    

Bonjour à tous.
 
Après mon entrée lamentable sur ce forum, (http://forum.hardware.fr/hfr/Progr [...] m#t1866287) j'ai découvert un truc dont j'avais pas idée : un tableau n'est pas un pointeur !
 
Alors on pourra dire toute ce qu'on veut sur mon école d'ingénieur, mais là, je tombe des nues, j'y comprends rien malgré ma bonne volonté à lire (et essayer de comprendre) les multiples messages référents à ce qui visiblement est quasiment un troll sur ce forum. (que j'ai essayé de référencer ici également).  
Quand aux docs sur le net, j'ai rien trouvé qui m'explique cela correctement...
 
En fait, ce qui me chagrinne dans cette histoire, c'est que je n'ai entendu nulle part dans ces topics parler d'allocation. Or, cela me semble la base de tout !!
 
Pour plagier Ace17 http://forum.hardware.fr/hfr/Progr [...] 8905_1.htm :

Code :
  1. char name1[20]; //allocation statique
  2. char* name2; // définition d'un pointeur
  3. name2 = (char *) malloc(20*sizeof(char)); // allocation dynamique
  4. name2[2] = 'c'; // Légal puisque le tableau est alloué maintenant


Dites moi si je me trompe.
 
Je me serait très bien passé de cette polémique, mais je souhaite faire un qsort qui appelle une fonction de comparaison (sur une chaine de caractère allouée dynamiquement qui est dans une structure). Mon compilateur me dit que j'ai un déréférencement, et sortie du code tout fait ( return( strcmp(*(char **)sp1, *(char **)sp2) ); ) je suis perdue dans les typages.
 
Merci à tous ceux qui accepterons d'éclairer ma lanterne.

Reply

Marsh Posté le 26-03-2009 à 18:35:47   

Reply

Marsh Posté le 26-03-2009 à 18:44:57    

Caille Rotie a écrit :

je souhaite faire un qsort qui appelle une fonction de comparaison (sur une chaine de caractère allouée dynamiquement qui est dans une structure). Mon compilateur me dit que j'ai un déréférencement, et sortie du code tout fait ( return( strcmp(*(char **)sp1, *(char **)sp2) ); ) je suis perdue dans les typages.


Le fait que le tableau soit alloué ou pas n'a pas d'importance pour qsort(). L'important est :

 

1 - de passer les bons paramètres à qsort()
2 - de comprendre la signification des paramètres de la fonction de comparaison que l'on doit écrire.

 

http://mapage.noos.fr/emdel/qsort.htm

 

Ensuite, fait de ton mieux et poste ton code si tu as un problème.


Message édité par Emmanuel Delahaye le 26-03-2009 à 18:47:29

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-03-2009 à 20:56:36    

Merci pour le lien, clair et explicite.
Ca a pas marché tout de suite, mais j'ai fini par corriger des problèmes de déclaration, et ça passe.
 
Merci beaucoup et tant pis pour le coup des pointeurs vs tableaux, j'aurais bien l'occasion de m'y recoller à une nouvelle occasion.

Reply

Marsh Posté le 26-03-2009 à 23:41:00    

Note que sur le lien d'Emmanuel figure également un excellent chapitre traitant justement de ce sujet : http://mapage.noos.fr/emdel/notes.htm#tableau


Message édité par Elmoricq le 26-03-2009 à 23:41:36
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed