Fonction et Tableau

Signaler
Messages postés
9
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
22 décembre 2004
-
Messages postés
6
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
24 décembre 2004
-
Salut !!
J'suis débutant en C. Mon probleme est le suivant:
Je sais comment fonctionne le passage de parametres d'une variable avec les foncions. Mais je ne sais pas comment cela fonctionne avec un tableau. Si quelqu'un pouvais me faire un petit tuto tout simple et si possible sans pointeurs, je suis preneur.
Merci d'avance


KRIS 83

5 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
par ddéfinition on ne peut pas passer un tableau en parametre à une fonction
mais il suffit de passer un pointeur (=variable qui contient une adresse) qui contiendra l'adresse du premier element du tableau (= son nom)

/* le prototype de la fonction */
void func( int *v ); /* ou const int *v si la fonction ne modifie pas les données pointées par v */

int v[10]; /* v est l'adresse de son premier element */

/* appel */
func( v );

dans la fonction, utilise v comme un pointeur, tu peux (comme pour un tableau) acceder aux éléments avec l'opérateur []
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Passage de parametres sans parler de pointeurs, c pas possible, regarde je t'explique, je prends l'exemple d'une fonction que tu as surement du utiliser :

char strcpy(char *dest, const char *src);

lorsk tu appelles strcpy, tu fais de cette maniere :

char szdest[256];
char szsrc[] = "Coucou";

strcpy(szdest, szsrc);

Tu as passé en parametre de la fonction, tes deux tableaux...Mais la particularité du C, c que lorsk tu ecris :

szdest;

Tu designes en fait ceci : &szdest[0], qui est l'adresse du premier element du tableau, et ceci peu impote le type du tableau (int, char...etc).
Donc si tu veux passer un tableau a une fonction que tu crées toi mm, le prototype peut etre :

int coucou(int *hello);
int coucou(int hello[]);
int coucou(int hello[520]); //peu importe la 'taille ke tu mets' (ici 520), elle ne sera pas prise en compte

Ces trois ecritures sont totalement equivalentes.
Et pour l'appeler, tu feras de cette maniere :

int hello[500];

coucou(hello);

Et dans ta fonction coucou, tu utilises le tableau de la mm maniere que dans la fonction appelante :

int coucou (int *hello) {

coucou[2] = coucou[0] + coucou[1];

....
}

Pour connaitre la taille de ton tableau dans 'coucou' , il te faudra ajouter un parametre ki contiendra cette taille, paskun appel a sizeof te donnera 4 (taille d'un pointeur car ca designera, comme dit plus haut, &hello[0]). Voila :

int coucou(int *hello, int len);

Voila, j'espere avoir répondu a la question, sinon, si kelks aspects restent obscurs, n'hesite pas.

Bonne chance

++

+2(p - n)
Messages postés
9
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
22 décembre 2004

Merci a tt les deux, je vai étudier ca de plus près ainsi que les pointeurs.
@++
KRIS 83
Messages postés
298
Date d'inscription
jeudi 12 juin 2003
Statut
Membre
Dernière intervention
9 juillet 2008
1
void fnct(int varlocal[])
{
varlocal[0]=4;
printf("%d",varlocal[0]);
}

int main()
{
int iparam[10];
fnct(iparam);
}
Messages postés
6
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
24 décembre 2004

Moi j'aurais une petite question.

Si j'ai un tableau a deux dimensions comment on fait?
parceque j'arrive pas comme ca!

void afficher(int *pTab){
printf("%d", pTab[0][0]);
}

main() {
int tab[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
afficher(tab);
}

Ca ne marche pas ca et je ne comprend pas pourquoi. Il me met comme erreur : error C2664: 'afficher' : impossible de convertir le paramètre 1 de 'int [2][5]' en 'int *'