Les Allergies
Alimentaires
Posez votre question Signaler

Différence pointeur/tableau en C

amouyi50 3Messages postés 11 avril 2009Date d'inscription - Dernière réponse le 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.
Lire la suite 

Différence pointeur/tableau en C »

4 réponses
Réponse
+0
moins plus
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)
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Petit up !
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « Différence pointeur/tableau en C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?