probleme sur le passage d'argument par adresse
Bonjour à tous,
le problème va surement paraitre simple à certains , mais j'ai du mal à saisir la notion de passage d'arguments par adresse.
en effet dans les programmes de mon entreprise, cette notion et beaucoup utilisée et j'avoue que je m'y perd un peu ( car souvent cela ne coorespond pas trop avec les docs que j'ai consultées).
plus particulièrement, je veux faire passer un tableaux de chaines de caracteres en arguments, et j'ai essayé plusieurs méthodes mais toutes me donnes des warning lors de la compile ....
si quelqu' un pouvait me donner une explications (au moins pr mon tableaux), ça serait avec plaisir.
pour infos voila ce que j ai deja ecrit
Code:
1 2 3 4 5 6 7
|
char decoup[6][100]; //tableaux de 6 chaines de 100 caractere
.......
ma_fonction(char *decoup)
{
....
} |
merci d'avance.
Re: probleme sur le passage d'argument par adresse
Bonjour,
Citation:
Envoyé par ghostdog
mais j'ai du mal à saisir la notion de passage d'arguments par adresse.
Si tu fait du C, ce n'est pas génant, les arguments sont toujours passés par valeur!
Citation:
Envoyé par ghostdog
j'ai essayé plusieurs méthodes mais toutes me donnes des warning lors de la compile ....
...
Code:
1 2 3 4 5 6 7
|
char decoup[6][100]; //tableaux de 6 chaines de 100 caractere
.......
ma_fonction(char *decoup)
{
....
} |
Tout dépend de la manière dont la fontion ma_fontion est appelée. Peut être que ceci Les pointeurs du C et du C++ te permettra d'y voir plus clair ;)
Re: probleme sur le passage d'argument par adresse
Citation:
Envoyé par ghostdog
le problème va surement paraitre simple à certains , mais j'ai du mal à saisir la notion de passage d'arguments par adresse.
Connait pas. En C il n'existe que des passages d'arguments par valeur. Celle-ci peut être une adresse.
Citation:
en effet dans les programmes de mon entreprise, cette notion et beaucoup utilisée et j'avoue que je m'y perd un peu ( car souvent cela ne coorespond pas trop avec les docs que j'ai consultées).
C'est une notion fausse.
Citation:
plus particulièrement, je veux faire passer un tableaux de chaines de caracteres en arguments, et j'ai essayé plusieurs méthodes mais toutes me donnes des warning lors de la compile ....
Ca montre bien qu'il y a un manque de maitrise quelquepart...
Citation:
si quelqu' un pouvait me donner une explications (au moins pr mon tableaux), ça serait avec plaisir.
http://emmanuel-delahaye.developpez.....htm#param_tab
Citation:
pour infos voila ce que j ai deja ecrit
Code:
1 2 3 4 5 6 7
|
char decoup[6][100]; //tableaux de 6 chaines de 100 caractere
.......
ma_fonction(char *decoup)
{
....
} |
C'est une FAQ, non ?
Code:
1 2 3
| ma_fonction(char decoup[6][100])
{
} |
ou
Code:
1 2 3
| ma_fonction(char decoup[][100])
{
} |
ou
Code:
1 2 3
| ma_fonction(char (*decoup)[100])
{
} |
Pour illustrer le propos (le 4 ème cas fait appel au pointeur sur tableau)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#include <stdio.h>
static void a (char decoup[6][100])
{
printf ("sizeof decoup = %u\n", (unsigned) sizeof decoup);
printf ("sizeof *decoup = %u\n", (unsigned) sizeof *decoup);
printf ("sizeof **decoup = %u\n", (unsigned) sizeof **decoup);
printf ("\n");
}
static void b (char decoup[][100])
{
printf ("sizeof decoup = %u\n", (unsigned) sizeof decoup);
printf ("sizeof *decoup = %u\n", (unsigned) sizeof *decoup);
printf ("sizeof **decoup = %u\n", (unsigned) sizeof **decoup);
printf ("\n");
}
static void c (char (*decoup)[100])
{
printf ("sizeof decoup = %u\n", (unsigned) sizeof decoup);
printf ("sizeof *decoup = %u\n", (unsigned) sizeof *decoup);
printf ("sizeof **decoup = %u\n", (unsigned) sizeof **decoup);
printf ("\n");
}
static void d (char (*decoup)[6][100])
{
printf ("sizeof decoup = %u\n", (unsigned) sizeof decoup);
printf ("sizeof *decoup = %u\n", (unsigned) sizeof *decoup);
printf ("sizeof **decoup = %u\n", (unsigned) sizeof **decoup);
printf ("sizeof ***decoup = %u\n", (unsigned) sizeof ***decoup);
printf ("\n");
}
int main ()
{
char decoup[6][100];
a (decoup);
b (decoup);
c (decoup);
d (&decoup);
return 0;
} |
Donne chez moi (PC/XP/mingw) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
sizeof decoup = 4
sizeof *decoup = 100
sizeof **decoup = 1
sizeof decoup = 4
sizeof *decoup = 100
sizeof **decoup = 1
sizeof decoup = 4
sizeof *decoup = 100
sizeof **decoup = 1
sizeof decoup = 4
sizeof *decoup = 600
sizeof **decoup = 100
sizeof ***decoup = 1 |
Re: probleme sur le passage d'argument par adresse