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

  • Partager ce contenu :
Vos réponses Page 4 / 4
Trier par : date / pertinence
Richard Delorme
Le #508810

|
| > Non, c'est plutôt l'heure de sortir pour aller faire la fête.

T'habite dans le nord ?


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

DINH Viêt Hoà
Le #508809

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 !

--
DINH V. Hoa,

etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan

tessierNO
Le #516267
Richard Delorme wrote:
Je ne suis pas d'accord, le tableau et la liste chainée ont des applications
différentes et ne sont pas uniquement des zones de stockage. La liste
chainée est particulièrement utile quand on pratique des suppressions et
des insertions d'éléments quelconques, et explose dans ce cas, le tableau.
On peut concevoir des liste chainées avec un minimum d'allocation, et même


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 ?

en utilisant que de la mémoire automatique.


Qu'entends-tu par "mémoire automatique" ?

Gaël

Richard Delorme
Le #516266

Richard Delorme wrote:
Je ne suis pas d'accord, le tableau et la liste chainée ont des
applications différentes et ne sont pas uniquement des zones de stockage.
La liste chainée est particulièrement utile quand on pratique des
suppressions et des insertions d'éléments quelconques, et explose dans ce
cas, le tableau. On peut concevoir des liste chainées avec un minimum
d'allocation, et même


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 ?


Oui.

en utilisant que de la mémoire automatique.


Qu'entends-tu par "mémoire automatique" ?


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


Emmanuel Delahaye
Le #516262
In 'fr.comp.lang.c', Richard Delorme
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.


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/

Gabriel Dos Reis
Le #559431
DINH Viêt Hoà
|
| > 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
Poster une réponse
Anonyme