Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction retournant un pointeur...

36 réponses
Avatar
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

6 réponses

1 2 3 4
Avatar
Richard Delorme

|
| > 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

Avatar
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 !

--
DINH V. Hoa,

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

Avatar
tessierNO
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

Avatar
Richard Delorme

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 <stdio.h>

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


Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Richard Delorme wrote:

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/

Avatar
Gabriel Dos Reis
DINH Viêt Hoà writes:

|
| > 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
1 2 3 4