(Courriels de diversion: <aviserait@mesestimee-recachettes.com> <usurperas@nabot-affreter.com> <nicherai@spolierais-assignerions.com> <sablier@surexcitant-rassoyant.com> <mobiliserai@espacerons-croquee.com> <dedommagees@boutonnerez-decante.com> <desertaient@grippent-devront.com> <enclume@reconcilierez-inserent.com> <gares@egrenerais-infiltree.com> <inattentive@falsification-fertilisant.com> )
Le mercredi 25 octobre 2006 à 20:03 +0200, Jean-Michel a écrit : > Guillaume Betous a écrit : > > > J'ai une fonction qui demande un tableau (?) int **dists mais je > >> ne sais pas comment le remplir, donc je cherche des exemples. > > > > int **dists est équivalent à int *dist[] > > > Oui et non... > > Les deux concepts sont ici similaires mais différents. > Le concept de pointeur permet de pointer sur un item. > Le concept de tableau permet de pointer sur une table de machins. > > En C, on peut assez souvent intervertir les deux concepts, toutefois, il > n'est écrit nul part que cela pourrait être une bonne idée (d'intervertir). > > En particulier, en C, il ne faut pas confondre: > + un pointeur sur un pointeur (c'est ce que veux rigoureusement dire **) > + un tableau de tableau (les arguments du main en C) > + un tableau de pointeurs > + un pointeur de tableaux > > Un typage fort devrait permettre d'éviter ce genre de gag, l'utilisation > appropriée de typedef est recommandée. > Mais lorsque l'on réutilise des bibliothèques codées par d'autres, ce > n'est hélas pas toujours possible... > C'est un vieux débat. En fait tous ceux qui ont lu les versions originales de "The C Programming Language" de Kernighan et Ritchie ou les "software tools" de Kernighan (je sais, la plupart d'entre vous n'étiez pas encore nés...) se souviennent que la "philosophie" des fondateurs d'Unix et de C prônait exactement l'inverse de ce que tu dis. Pour eux, les programmeurs "savent ce qu'ils font" et il y a nombre de fonctions des "Software tools" qui acceptent en paramètre le truc le plus basic qui soit : un pointeur sur un tableau d'octets .Rappelez vous que le langage C a été primitivement conçu comme langage portable pour remplacer des dizaines de milliers de lignes de code d'un système d'exploitation écrit en assembleur et que par nombre d'aspect c'est un langage de très bas niveau. Ce n'est que bien plus tard et en particulier lorsque C est devenu le langage privilégié de développement sur micro-ordinateur que des efforts ont été entrepris pour le rendre plus conforme aux standards enseignés par les "Computer scientists" ( d'accord ça commençait à diverger mais la guerre Borland Microsoft n'y était pas pour rien...). Alors est venu l'"ansi C". A noter qu'il existe toujours sur tous les compilateurs des paramètres permettant de traiter du C "K&R"... L'un des arguments présentés à l'époque étaient que pour la plupart des programmes, on passe plus de temps à les écrire qu'à les utiliser et que dans les cas où la sécurité des biens et des personnes sont en jeu mieux vaut utiliser l'un des nombreux langages "paranoïaques" qui existent pour ce faire. jpn -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>