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

Fonction qui retourne un tableau de pointeurs de structures.

3 réponses
Avatar
Peyroux
Bonjours, je n'arrives pas =E0 d=E9finir une fonction qui retourne un
tableau de pointeurs de structures.

3 réponses

Avatar
Pierre Maurette
Bonjours, je n'arrives pas à définir une fonction qui retourne un
tableau de pointeurs de structures.
Par exemple:


typedef struct
{
int membre1;
/* ... */
} MyStruct_t;

MyStruct_t* f(size_t n)
{
MyStruct_t* result = malloc(n * sizeof(MyStruct_t));
return result;
}

?

--
Pierre Maurette

Avatar
Emmanuel Delahaye
Bonjours, je n'arrives pas à définir une fonction qui retourne un
tableau de pointeurs de structures.

Normal, une fonction ne peut pas retourner un tableau. Tout ce qu'elle

peut faire c'est retourner l'adresse du premier élément du tableau.

T* f (params ... )

évidemment, il manque une information sur la taille ou le nombre
d'éléments...

Il est recommandé d'utiliser une structure :

struct array
{
T *p;
size_t n;
};

que l'on peut retourner

struct array f (params ... )

ou dont on peut passer l'adresse...

int f (struct array *p)

La fonction se charge de remplir les champs...

--
A+

Emmanuel Delahaye

Avatar
Marc Boyer
Le 30-03-2006, Peyroux a écrit :
Bonjours, je n'arrives pas à définir une fonction qui retourne un
tableau de pointeurs de structures.


Hormis le fait, comme signalé par Emmanuel, qu'on ne peut
pas retourner un tableau, mais qu'on peut retourner un pointeur
sur un tableau, ou un pointeur sur son premier élément, ou
une structure contenant un tableau, voici une solution (brute).

typedef struct {
int i;
} S;

S** foo(void){
static S s1, s2;
static S* tab[]= {&s1, &s2};
return tab;
}

Mais si tu veux faire plus clair, on peut aussi faire
typedef pS* S; // pointeur sur S

pS* bar(void);

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)