J'aimerais savoir quelle est la différence entre les 3 écritures suivantes :tab**, *tab[] et tab[][]. On m'avait dit que c'était équivalent, mais je me suis aperçu que ce n'était en fait pas vraiment le cas!
Version imprimable
J'aimerais savoir quelle est la différence entre les 3 écritures suivantes :tab**, *tab[] et tab[][]. On m'avait dit que c'était équivalent, mais je me suis aperçu que ce n'était en fait pas vraiment le cas!
Salut !
C'est équivalent suivant les utilisation qui en sont faites en réalité:
- tab** : Pointeur de pointeur sur type, cela permet entre autre de pouvoir passer l'adresse d'un pointeur pour qu'il soit modifiable par le biais d'un argument d'une fonction. Cette forme permet également de créer un tableau de tableau dynamique donc par allocation dynamique de mémoire. On peut également passer des tableau de tableau en argument à des fonctions par le biais d'un pointeur de pointeur.
- * tab[] : Ceci est un tableau de pointeur, ce qui est déjà différent en soi ! Ceci permet en outre de créer un tableau et d'y insérer des pointeur, un peu comme on le ferais avec une liste chaînée. Une des utilité possible serait un tableau de chaîne de caractères dont l'espace pour chaque chaînes peut être alloué dynamiquement !
- tab[][] : Ca bin, c'est un tableau de tableau tout ce qu'il y a de plus simple en fait !
Quoi qu'il en soit, ces formes resteront toujours différentes l'une de l'autre !
'On' est un âne. Il confond les tableau et les pointeurs. Se méfier des charlatans qui croient connaitre le C.Citation:
Envoyé par Dud225
- T **pp : pointeur sur pointeur sur T. Par exemple, la base d'un tableau de T* (pointeurs sur T)
- T *p[] n'a de sens que pour un paramètre de fonction. Il est équivalent à T **pp
- T *a[N] est un tableau de pointeurs sur T.
- T a[][] n'existe pas.
- T a[N][M] est un tableau à 2 dimensions de T.
Et j'ajoute T (*p)[N] : Pointeur sur tableau(x) de T.