Fonction retournant un pointeur...
Le
thierryabrard

Bonjour,
Lorsque l'on défini une fonction, peut-elle retourner un pointeur
(tableau) ?
Actuellement, j'ai défini quelques fonctions du type :
void MaFonction (char Data1, char Data2)
{
le calcul
Resultat[0] = ?;
Resultat[1] = ?;
}
Pour réutiliser mon tableau Resultat et ces données dans le main, je
le défini donc en variables globale (char Resultat[2]). Mais je trouve
que cette méthode n'est pas très simple à utiliser par la suite en
effet, dans le main je me retrouve avec des fonctions :
Mafonction (Octet1, Octet2)
et faut ensuite se souvenir de quelle variable globale y est
associé
J'aimerais donc savoir si il est possible en C (j'ai encore beaucoup à
découvir) d'avoir une fonction du style : Resultat =
MaFonction(Octet1, Octet2) avec Resultat comme tableau
Faut-il faire jouer les pointeurs là dedans ?
J'ai essayé :
Char * MaFonction (char Data1, char Data2)
{
char Resultat[2];
mes calculs (Resultat[0] = ?, Resultat[1]=?)
return Resultat;
}
puis dans le main :
Resultat[0]=Mafonction(Octet1, Octet2)
Mais Resultat[1] n'est pas correct
Si vous avez une piste à ce sujet pour obtenir ce que je souhaite
Je vous remercie,
TA
Lorsque l'on défini une fonction, peut-elle retourner un pointeur
(tableau) ?
Actuellement, j'ai défini quelques fonctions du type :
void MaFonction (char Data1, char Data2)
{
le calcul
Resultat[0] = ?;
Resultat[1] = ?;
}
Pour réutiliser mon tableau Resultat et ces données dans le main, je
le défini donc en variables globale (char Resultat[2]). Mais je trouve
que cette méthode n'est pas très simple à utiliser par la suite en
effet, dans le main je me retrouve avec des fonctions :
Mafonction (Octet1, Octet2)
et faut ensuite se souvenir de quelle variable globale y est
associé
J'aimerais donc savoir si il est possible en C (j'ai encore beaucoup à
découvir) d'avoir une fonction du style : Resultat =
MaFonction(Octet1, Octet2) avec Resultat comme tableau
Faut-il faire jouer les pointeurs là dedans ?
J'ai essayé :
Char * MaFonction (char Data1, char Data2)
{
char Resultat[2];
mes calculs (Resultat[0] = ?, Resultat[1]=?)
return Resultat;
}
puis dans le main :
Resultat[0]=Mafonction(Octet1, Octet2)
Mais Resultat[1] n'est pas correct
Si vous avez une piste à ce sujet pour obtenir ce que je souhaite
Je vous remercie,
TA
Non, mais ce n'est pas une raison de ne pas faire la fête :-)
Si tu veux deviner vers quelle grande ville j'habite, la grande fête est
pour ce soir (8 décembre).
--
Richard
lyon !
--
DINH V. Hoa,
etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan
Un minimum d'allocations, tu veux dire que tu alloues un grand tableau
et tu pioches dedans quand tu as besoin d'une cellule. Tu réalloues si
nécessaire et tu gères les cellules libres dans une pile par exemple ?
Qu'entends-tu par "mémoire automatique" ?
Gaël
Oui.
Ce que la norme appelle « automatic storage duration » :
6.2.4 Storage durations of objects
[#1] An object has a storage duration that determines its
lifetime. There are three storage durations: static,
automatic, and allocated. Allocated storage is described in
7.20.3.
[#3] An object whose identifier is declared with no linkage
and without the storage-class specifier static has automatic
storage duration. |
Par exemple :
/* ----------8<-------------------- */
#include
struct List {
int val;
struct List *next;
};
void list_print(struct List *list) {
while(list) {
printf("%dn", list->val);
list = list->next;
}
}
#define N_ITEM 10
int main(void) {
struct List list[N_ITEM];
int i;
for(i = 0; i < N_ITEM; i++) {
list[i].val = i + 1;
if(i + 1 < N_ITEM) list[i].next = list + i + 1;
else list[i].next = NULL;
}
list_print(list);
return 0;
}
/* ----------8<-------------------- */
La fonction list_print() manipule une liste simple classique et en affiche
les éléments. Ces éléments ne sont pas alloués, mais pris dans un tableau
dans main().
Le principe est intéressant si on a besoin d'une liste (pour ces propriétés
intéressantes) d'une taille relativement faible et connue à l'avance.
--
Richard
Ah, un tableau!
--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
|
| > Non, mais ce n'est pas une raison de ne pas faire la fête :-)
| > Si tu veux deviner vers quelle grande ville j'habite, la grande fête est
| > pour ce soir (8 décembre).
|
| lyon !
Arf, c'est pas juste :-/
-- Gaby