<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[Cours #7] Les pointeurs sur fonction]]></title><description><![CDATA[<p dir="auto">&lt;p&gt;Bonjour à tous,&lt;br/&gt;<br />
Ce cours va être très court (oh ce jeu de mot!). En effet, je vais juste vous montrer comment faire un pointeur sur fonction.&lt;/p&gt;<br />
&lt;p&gt; &lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;I- Pointeur sur fonction? Kesako?&lt;/strong&gt;&lt;br/&gt;<br />
Un pointeur sur fonction, c'est simplement une manière d'appeler une fonction, en passant par un pointeur.&lt;br/&gt;<br />
Par exemple:&lt;/p&gt;<br />
&lt;pre class="ipsCode prettyprint"&gt;<br />
void (*function_pointer)(char);<br />
function_pointer = &amp;my_putchar; // Vous pouvez retrouver la fonction my_putchar sur<br />
le cours #1.<br />
function_pointer('A');&lt;/pre&gt;<br />
&lt;p&gt;<br />
Le programme ci-dessus crée le pointeur sur fonction function_pointer, et lui définit l'adresse de my_putchar (qui permet d'afficher un caractère).&lt;br/&gt;<br />
Il affiche 'A'.&lt;/p&gt;<br />
&lt;p&gt;<br />
II- Utilité?&lt;br/&gt;<br />
Un pointeur sur fonction permet d'appeler une fonction via un pointeur. Il est très souvent utilisé pour les tableaux de pointeurs sur fonction. Ce qui permet, par exemple, d'appeler une fonction en fonction d'une condition, sans avoir 40 000 if/else.&lt;br/&gt;<br />
Exemple de tableau de pointeurs sur fonction:&lt;/p&gt;<br />
&lt;pre class="ipsCode prettyprint"&gt;<br />
#include &lt;unistd.h&gt;<br />
void my_putchar(char c)<br />
{<br />
write(1, &amp;c, 1);<br />
}</p>
<p dir="auto">void my_putstr(char *str)<br />
{<br />
while(<em>str)<br />
my_putchar(</em>(str++));<br />
}</p>
<p dir="auto">void aff_help()<br />
{<br />
my_putstr("Commandes:\ncoucou: affiche salut\ndada: affiche dadi\npopo affiche caca");<br />
}</p>
<p dir="auto">void aff_coucou()<br />
{<br />
my_putstr("salut\n");<br />
}<br />
void aff_dada()<br />
{<br />
my_putstr("dadi\n");<br />
}</p>
<p dir="auto">void aff_popo()<br />
{<br />
my_putstr("caca\n");<br />
}</p>
<p dir="auto">void do_cmd(char *cmd)<br />
{<br />
void (*fptr[])() = {&amp;aff_popo, &amp;aff_dada, &amp;aff_coucou};<br />
char cmds[] = {"popo", "dada", "coucou"};<br />
int i = -1;</p>
<p dir="auto">while (++i &lt; 3)<br />
{<br />
if (!strcmp(cmds[i], cmd))<br />
{<br />
fptr(i)();<br />
return ;<br />
}<br />
}<br />
my_putstr("Commande introuvable.");<br />
}</p>
<p dir="auto">int main(int ac, char **av)<br />
{<br />
int readed;</p>
<p dir="auto">char buffer[4096];<br />
my_putstr("Entrez votre commande. Utilisez CTRL+D pour quitter\n");<br />
while ((readed = read(0, buffer, 4095)) != -1)<br />
{<br />
buffer[readed] = '\0';<br />
do_cmd(buffer);<br />
}<br />
return (0);<br />
}<br />
&lt;/pre&gt;<br />
&lt;p&gt;&lt;strong&gt;III- Déclaration et appel.&lt;/strong&gt;&lt;br/&gt;<br />
Enfin, voyons comment déclarer un pointeur sur fonction, puis comment lui définir une fonction.&lt;br/&gt;<br />
Déclarons notre pointeur. Forme de déclaration:&lt;/p&gt;<br />
&lt;pre class="ipsCode prettyprint"&gt;<br />
typage_renvoyé_par_la_fonction (*nom_pointeur)(arguments_pris_par_la_fonction);&lt;/pre&gt;<br />
&lt;p&gt;<br />
Par exemple, pour printf:&lt;/p&gt;<br />
&lt;pre class="ipsCode prettyprint"&gt;<br />
int (*myptr)(char *, ...); // oui, les ... sont un type. Il existe une fonction qui permet de récupérer une infinité d'args dans une fonction, mais je vousl’expliquerais dans un prochain cours!<br />
// Assignation<br />
myptr = &amp;printf;<br />
// Utilisation<br />
myptr("Salut tout le %s", "monde!\n");<br />
&lt;/pre&gt;<br />
&lt;p&gt;Voilà.&lt;br/&gt;<br />
Vous l'aurez compris, les pointeurs sur fonctions sont très, TRES utilisés dans le monde du développement. Il est donc important de savoir les utiliser, pour apprendre à gagner des lignes.&lt;br/&gt;<br />
Je vous dis a bientôt pour un prochain cours!&lt;br/&gt;<br />
Cours écrit par AlexMog. Contact: alexmog [at] live [point] fr&lt;/p&gt;</p>
]]></description><link>https://melinyel.net/topic/746/cours-7-les-pointeurs-sur-fonction</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 04:35:18 GMT</lastBuildDate><atom:link href="https://melinyel.net/topic/746.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 May 2014 14:47:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Cours #7] Les pointeurs sur fonction on Sat, 24 May 2014 13:26:02 GMT]]></title><description><![CDATA[<p dir="auto">&lt;p&gt;Noté. <img src="https://melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=d0a000c383a" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /> &lt;/p&gt;</p>
]]></description><link>https://melinyel.net/post/7980</link><guid isPermaLink="true">https://melinyel.net/post/7980</guid><dc:creator><![CDATA[Azad]]></dc:creator><pubDate>Sat, 24 May 2014 13:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to [Cours #7] Les pointeurs sur fonction on Sat, 24 May 2014 13:25:48 GMT]]></title><description><![CDATA[<p dir="auto">&lt;blockquote class="ipsQuote" data-cite="Azad" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="7924" data-ipsquote-contentid="746" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1400833483" data-ipsquote-username="Azad"&gt;&lt;div&gt;<br />
&lt;div&gt;<br />
&lt;p&gt;Bon guide, et merci pour l'exemple. <img src="https://melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=d0a000c383a" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /> &lt;/p&gt;&lt;p&gt;<br />
+1 rep évidemment et comme toujours.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;<br />
Tu pourrais donner des exemples concrets d'application dans lesquelles l'utilisation des pointeurs est impératif ?&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;&lt;/blockquote&gt;<br />
&lt;p&gt; &lt;/p&gt;<br />
&lt;p&gt;Toutes les applications qui nécessitent de vérifier des chaines (par exemple, un lexeur parseur <img src="https://melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=d0a000c383a" class="not-responsive emoji emoji-android emoji--wink" style="height:23px;width:auto;vertical-align:middle" title=";)" alt="😉" /> ). Pour exemple, j'en utilise une au niveau du serveur du Melichat.  Ça simplifie pas mal le code.&lt;/p&gt;</p>
]]></description><link>https://melinyel.net/post/7929</link><guid isPermaLink="true">https://melinyel.net/post/7929</guid><dc:creator><![CDATA[AlexMog]]></dc:creator><pubDate>Sat, 24 May 2014 13:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to [Cours #7] Les pointeurs sur fonction on Fri, 23 May 2014 08:24:43 GMT]]></title><description><![CDATA[<p dir="auto">&lt;p&gt;Bon guide, et merci pour l'exemple. <img src="https://melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=d0a000c383a" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /> &lt;br/&gt;<br />
+1 rep évidemment et comme toujours.&lt;br/&gt;&lt;br/&gt;<br />
Tu pourrais donner des exemples concrets d'application dans lesquelles l'utilisation des pointeurs est impératif ?&lt;/p&gt;</p>
]]></description><link>https://melinyel.net/post/7924</link><guid isPermaLink="true">https://melinyel.net/post/7924</guid><dc:creator><![CDATA[Azad]]></dc:creator><pubDate>Fri, 23 May 2014 08:24:43 GMT</pubDate></item></channel></rss>