Hello.
j'ai un pb :
je voudrai simplement passer un int tab[81][9] a une fonction de remplissage : remplir(int* t[81][9])
je l'appel de la sorte : remplir(&tab);
Et apparement c pas bon!
Pourriez vous me donner la syntaxe exact?
Merci d'avance.
Hello.
j'ai un pb :
je voudrai simplement passer un int tab[81][9] a une fonction de remplissage : remplir(int* t[81][9])
je l'appel de la sorte : remplir(&tab);
Et apparement c pas bon!
Pourriez vous me donner la syntaxe exact?
Merci d'avance.
On ne peut pas le faire sous cette forme, car un tableau à 2 dimensions n'est qu'une représentation d'une zone mémoire (de 82*10 elements dans cet exemple).
Il faut donc passer l'adresse du tableau, ainsi que les 2 dimensions pour pouvoir l'utiliser dans la fonction. Quelquechose dans le genre :
Fonction : remplir(int* t,int dim1, int dim2)
Appel de la fonction : remplir(&tab,81,9);
Tu dis des bêtises...Envoyé par larnicebafteur
http://emmanuel-delahaye.developpez.....htm#param_tab
Essaye de déclarer ta fonction comme ceci :Envoyé par benthebest
Et tu l'appelle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(int t[][9])
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(tab);
On peut aussi déclarer un tableau comme membre (unique) d'une structure et passer cette structure par référence.
Pas de 'passage par référence' en C. Par valeur uniquement. Les passages d'adresses sont explicites en C (via un opérateur & et un paramètres pointeur)Envoyé par NicolasG
http://emmanuel-delahaye.developpez.....htm#param_tabEnvoyé par benthebest
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(int t[81][9])
Mais il vaut mieux aussi passer les dimensions, tu en auras probablement besoin dans la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(int t[][9])
Appel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(int t[][9], size_t x, size_t y)
EDIT : suppression des * en trop. (Merci crocodilex)
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(tab, 81, 9);
La solution que je propose est fausse alors ?Envoyé par Emmanuel Delahaye
![]()
Non, c'est moi qui ais oublié de corriger... Maudit Copié/Collé...Envoyé par crocodilex
Si on utilise ceci comment on appelle la fonction?Envoyé par Emmanuel Delahaye
Déjà répondu. Il faut lire les messages en entiers...Envoyé par miron
La dernière dimension (ici 9) n'a pas besoin d'être passée en paramètre puisqu'elle est imposée par le compilateur :Envoyé par Emmanuel Delahaye
Appel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(int t[][9], size_t x)
Attention, la dimension supérieure n'est jamais vérifiée par le compilateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(tab, 81);
Il est trompeur d'écriremême si c'est parfaitement valide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part remplir(int t[81][9])
La dimension 81 n'est pas validée à la compilation et on peut très bien passer un tableau de dimension inférieure ([80][9] par exemple) qui conduira à un débordement à l'exécution.
Mais ceci ne passe pas que l@de t[81][9]?Envoyé par NicolasG
Cela passe tout le tableau?
Et pour eviter l'erreur marqué ensuite il faut faire quoi?
Un tableau est un pointeur.Envoyé par miron
Les tableaux ne sont donc jamais copiés lors d'un passage en tant que paramètre (sauf éventuellement en tant que membre d'une structure mais c'est un autre sujet).
En C, il n'y a pas de vérification de dépassement d'indice des tableaux.
C'est au développeur de faire attention.![]()
Envoyé par NicolasG
Esce que cela est un code bon?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ma_fonction(&Nom_voiture[20]) void ma_fonction(char*Nom_voiture[])
Ainsi que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ma_fonction(&voiture_aff[15][11]) void ma_fonction(char*voiture_aff[][])
Euh, spécial comme pointeur. Il n'a pas la taille habituelle d'un pointeur et il n'est pas modifiable...Envoyé par NicolasG
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int a[3]; int b[3]; int *p; a = b; /* ne compile pas */ sizeof p != sizeof a
Non. Ca passe l'adresse de t[0][0].Envoyé par miron
http://emmanuel-delahaye.developpez.....htm#param_tab
Partager