tshirtman a écritle concept est simple (et encore pas pour tout le monde), mais quand tu es dans ton code avec des
void function(int **list, int *ptr_tab, int tablen){
int *m_ptr;
int index;
for (index = 0; index < tablen, index++){
if (*list == NULL){
*list......
enfin bon je te la fait pas en entier (un genre de tris par insertion dans une liste chainé), ben c'est un peu lourd a écrire et facile de se planter dans les nombre d'étoiles et autre... quand à trouver ce genre d'erreurs en relisant....
en python t'es pas embété par ce genre de choses...
Dans quelles situations a-t-on besoin d'un
int **list ?
Les seules fois ou j'ai fait de telles choses datent d'une époque ou je ne savais pas coder. Ils ont été ensuite remplacés par des, par exemple,
int *list[], qui indiquent clairement un pointeur sur un tableau.
Je me souviens m'être fait engueulé justement parce que je faisais des pointeurs n'importe comment. Il faut
toujours se demander
pourquoi on fait un pointeur : et dans beaucoup de cas, on se rend compte qu'il n'est pas nécessaire de l'utiliser.
Mais en plus, il faut être capable d'écrire son code clairement : donc oui, au niveau de la mémoire, le tableau
est un pointeur. Mais même si c'est possible, c'est pas une raison pour l'appeler de la même façon.
Les cas ou on a besoin d'un pointeur sur un pointeur, c'est déjà extrêmement rare. Mais en plus, ce sont justement dans ce genre de cas que les pointeurs marquent toute leur flexibilité.
Si on y réfléchit bien, les références... c'est exactement la même chose ! La seule différence, c'est que leur notation prête à confusion.
Celle des pointeurs, non.
Alors oui, des références, c'est plus facile à lire et à écrire. Mais les pointeurs, c'est plus strict, et c'est moins facile de se tromper avec. Et quand on cherche à comprendre la logique d'un programme, on la comprend plus facilement avec des pointeurs qu'avec des références.
Parce que les pointeurs, eux, ils sont marqués partout.