Différence pointeur/tableau en C

Fermé
amouyi50 Messages postés 3 Date d'inscription samedi 11 avril 2009 Statut Membre Dernière intervention 12 avril 2009 - 11 avril 2009 à 16:35
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 12 avril 2009 à 12:18
Salut,

Quel est la différence entre :
void fonction(char *tab) {
//code
}

et :
void fonction(char tab[]) {
//code
}

et
void fonction(char tab[MAX]) {
//code
}

?
Dans quel cas on utilise l'un plutôt que l'autre ?

Merci pour votre aide.
A voir également:

4 réponses

etudiant89 Messages postés 4 Date d'inscription samedi 11 avril 2009 Statut Membre Dernière intervention 11 avril 2009
11 avril 2009 à 16:54
pas de différence entre "tab[]" et "*tab" dans les 2 cas ça pointe sur la première case du tableau mais sans la spécification de la taille du tableau alors que c le cas avec "tab[MAX]" ici on précise la taile du tableau ( un tableau de taille maximale MAX).
et il ne faut pas oublier l'initialisation de MAX:
define MAX 100 ;( à titre d'exemple)
0
amouyi50 Messages postés 3 Date d'inscription samedi 11 avril 2009 Statut Membre Dernière intervention 12 avril 2009
11 avril 2009 à 18:14
Merci etudiant89
Il n'y a même pas une subtilité entre void fonction(char tab[]) { ...} et void fonction(char *tab) { ...} ?

Et ça fait quoi si je ne donne pas la bonne valeur de MAX ?
Par exemple : void fonction(char tab[10]) alors que j'ai déclaré tab comme char tab[20] ?

Et pour les tableaux à deux dimensions :
Il y a différence entre void fonction(char **tab) et void fonction(char tab[][MAX]) et void fonction(char tab[MAX][MAX]) ?

Désolé pour les questions, mais je cherche à comprendre.

Encore merci
0
amouyi50 Messages postés 3 Date d'inscription samedi 11 avril 2009 Statut Membre Dernière intervention 12 avril 2009
12 avril 2009 à 01:17
Petit up !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
12 avril 2009 à 12:18
Salut,
Il n'y a même pas une subtilité entre void fonction(char tab[]) { ...} et void fonction(char *tab) { ...} ?
Non aucune. Le compilateur se ramène au cas *tab. Il envoie toujours l'adresse du premier élément du tableau.
Et ça fait quoi si je ne donne pas la bonne valeur de MAX ? void fonction(char tab[MAX]) { ...}
Rien. MAX est ignoré. Voire réponse ci-dessous.

Il y a différence entre void fonction(char **tab) et void fonction(char tab[][MAX]) et void fonction(char tab[MAX][MAX]) ?
Pour void fonction(char**tab), cela permettra de modifier l'adresse de l'objet pointée par tab (double pointeur).
Pour void fonction(char tab[][MAX]) et void fonction(char tab[][MAX]), cela est strictement équivalent. Le code sera compilé comme : void fonction(char (*tab)[MAX]). La première dimension est donc inutile et sera ignorée. Par contre, l'autre dimension est importante.

De manière plus générale, pour un tableau à N dimensions, le compilateur compilera comme :
void fonction(char (*tab)[DIM1][DIM2]...[DIMN]. Donc la première dimension est ignorée.

J'espère avoir répondu à ta question :-))).

Cdlt
0