Passage de paramètres (language C)

chap -  
 coq -
Bonjour,

J'ai un petit problème en language C.

Comment dois-je transmettre un tableau déclaré dans le main à une fonction en utilisant les indices et non les pointeurs ?

void chargertableau (int);

void main()
{
int tab[5][5];

chargertableau(?????);
}

void chargertableau(int ?????)
{
.............
.............
.............
}


Merci beaucoup.
A voir également:

5 réponses

djawida Messages postés 5 Statut Membre 1
 
si tu veux trouver tt les details sur ton sujet je te conseil d'aller voir: www.siteduzero.fr
c vrement bien detaille .
1
minikatou
 
je voudrai avoir le defintion exact et l'utilitè du passage par valeur et par adresse en c biensur! merci d'avance
0
Profil bloqué
 
Bonjour chap!! vous pouvez utiliser le modele suivant:

void chargertableau(int tab[][]); /*prototype*/

void main (void)
{

int tab[5][5];

chargertableau(tab); /*appel de la fonction*/
..................
}

void chargertableau(int tab[][]) /* déclaration de la fonction*/
{
.............
.............
.............
}

et ça marchera, mais attention cette méthode occupe trop la mémoire et surtout risque de saturer la pile. je vous conseil d'utiliser les pointeurs!!! BONNE chance.

autre remarque: je ne sais pas si vous avez remarquez que la fonction ne retourne rien? où allez vous recuperer le resultat de la fonction? sauf si vous allez stocker le resultat dans la mémoire puis allez la lire par la suite. au revoir
0
loupius Messages postés 789 Statut Membre 148
 
mais attention cette méthode occupe trop la mémoire
Oh ta pas tout, 'tab' est l'adresse du tableau; c'est donc un passage par adresse et il n'y a pas de recopie du tableau. En conséquence, la fonction n'a pas nécessairement besoin de retourner quelque chose; toute modification du tableau dans la fonction sera donc vue chez l'appellant.
Bonne continuation.
0
coq
 
Mon problème est similaire. Je souhaite passer un tableau à 2 dimensions en paramètres :

void Bla(){
/* initialisation du tableau donnees[][] */
afficheTableau(donnees, nbLigne, nbColonne);
}

void afficheTableau(int tableau[][], int nbLigne, int nbColonne){
blabla...
}

A la compilation j'ai : "array type has incomplete element type". Après recherche, j'ai trouvé ceci :

Lorsqu'on désire qu'un paramètre formel soit un tableau à deux dimensions, il faut le déclarer comme dans l'exemple suivant :
#define N 10
p(int t[][N])
{
... /* corps de p */
}
On peut en effet omettre la taille de la première dimension, mais il est nécessaire d'indiquer la taille de la seconde dimension, car le compilateur en a besoin pour générer le code permettant d'accéder à un élément.

Mon problème est que je ne sais pas à l'avance la taille de mon tableau. Je ne peux donc pas faire le define P comme dans l'exemple. Connaissez-vous une solution ?

Merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coq
 
Bonjour, j'ai un problème similaire.
J'ai trouvé sur un site ceci :

"Lorsqu'on désire qu'un paramètre formel soit un tableau à deux dimensions, il faut le déclarer comme dans l'exemple suivant :
#define N 10
p(int t[][N])
{
... /* corps de p */
}
On peut en effet omettre la taille de la première dimension, mais il est nécessaire d'indiquer la taille de la seconde dimension, car le compilateur en a besoin pour générer le code permettant d'accéder à un élément."

Je souhaite passer un tableau à 2 dimensions en paramètres mais je ne sais pas à l'avance quelle est sa taille. Je ne peux donc pas faire un define comme dans l'exemple. Connaissez-vous une solution ?
0