Fonction et Tableau

toff86 Messages postés 9 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 22 décembre 2004 - 26 nov. 2004 à 18:44
globe_dk Messages postés 6 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 24 décembre 2004 - 23 déc. 2004 à 15:23
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

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 nov. 2004 à 19:41
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 []
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 nov. 2004 à 19:42
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)
0
toff86 Messages postés 9 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 22 décembre 2004
27 nov. 2004 à 14:05
Merci a tt les deux, je vai étudier ca de plus près ainsi que les pointeurs.
@++
KRIS 83
0
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
28 nov. 2004 à 09:38
void fnct(int varlocal[])
{
varlocal[0]=4;
printf("%d",varlocal[0]);
}

int main()
{
int iparam[10];
fnct(iparam);
}
0

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

Posez votre question
globe_dk Messages postés 6 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 24 décembre 2004
23 déc. 2004 à 15:23
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 *'
0
Rejoignez-nous