Faire une pile en C

Signaler
Messages postés
34
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
7 février 2008
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Bonjour,
je voudrais faire une pile de fonctions en C
mais je ne sais pas du tout comment la faire sans utiliser de malloc
Je veux pas de malloc car je veux une vrai pile(comme en assembleur) mais pas de liste chainée
Si quelqu'un sait comment le faire je suis preneur
merci d'avance

8 réponses

Messages postés
100
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
9 juin 2014
1
et bien si tu connais la taille max de ta pile tu peux toujours allouer un tableau statique et gérer toi même l'ajout et le rentrait d'éléments non?
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Un tableau, comme dit par Spiffou et un index. C'est le minimum.
int pile[50];
int i = 0;

pile[i++] = 5; // On empile
j = pile[--i]; // On dépile

Tu peux aussi te faire des fonctions push et pop pour savoir si, par exemple, la pile est plein ou vide etc.

Sinon, sera un peu dur de faire une pile dynamique si tu ne veux pas utiliser l'allocation dynamique.

C++ (@++)<!--
Messages postés
34
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
7 février 2008

je me suis mal fait comprendre apparemment
j'ai dit pile de fonction

genre pile[0]=&fonction.o;
ou pile[0]=&fonction.c
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Je ne comprend pas. Si tu parles d'une pile de pointeurs sur fonction, ok, c'est le même principe. Mais, d'après ton exemple, je ne vois vraiment pas de quoi tu parles.

C++ (@++)<!--
Messages postés
34
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
7 février 2008

Mon exemple était un peu nul

Je crois qu'on est tous d'accord qu'une fonction et une procédure c'est quasi comparable.
Un pointeur de fonction c'est un truc du genre

int (*p_1ms)(int, int)=NULL;
p_1ms =&add;
int (*tab_fct[3]) () = {p_1ms, p_10ms,p_100ms};

mais comment faire une pile de pointeur de fonction(ou plutot de programme genre  add.c?
car toi tu fais une pile d'entier.
En gros par rapport à toi faudrais mettre les adresses des  fonctions ou des programmes.
Ca serait encore mieux pour moi 
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Comme ça le dis, il s'agit de pointeurs de fonction.
Un pointeur fait 4 octets (32bits).
Tu fais donc un tableau de DWORD dans lequel tu stocks l'adresse pointé, puis quand tu fais l'appel, tu transtypes (cast).

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
"Un pointeur fait 4 octets (32bits)."
Sur un système 32 bits bien sûr.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ou encore si tes fonctions ont toutes le même prototype:
Exemple:

typedef void(__stdcall *EXEMPLE)(int, int, int);

EXEMPLE pile[50];
int i = 0;

pile[i++] = fonction1; // On empile la fonction void __stdcall fonction1 (int a, int b, int c)
pile[--i](1, 2, 3); // On dépile et appel la fonction dans la pile

C++ (@++)<!--