Note that there are some explanatory texts on larger screens.

plurals
  1. POFunction pointers - pass arguments to a function pointer
    text
    copied!<p>I have a problem with the code that uses function pointers, take a look:</p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef void (*VFUNCV)(void); void fun1(int a, double b) { printf("%d %f fun1\n", a, b); } void fun2(int a, double b) { printf("%d %f fun2\n", a, b); } void call(int which, VFUNCV* fun, int a, double b) { fun[which](a, b); } int main() { VFUNCV fun[2] = {fun1, fun2}; call(0, fun, 3, 4.5); return 0; } </code></pre> <p>And it produces errors:</p> <pre><code>/home/ivy/Desktop/CTests//funargs.c||In function ‘call’:| /home/ivy/Desktop/CTests//funargs.c|11|error: too many arguments to function ‘*(fun + (unsigned int)((unsigned int)which * 4u))’| /home/ivy/Desktop/CTests//funargs.c||In function ‘main’:| /home/ivy/Desktop/CTests//funargs.c|16|warning: initialization from incompatible pointer type [enabled by default]| /home/ivy/Desktop/CTests//funargs.c|16|warning: (near initialization for ‘fun[0]’) [enabled by default]| /home/ivy/Desktop/CTests//funargs.c|16|warning: initialization from incompatible pointer type [enabled by default]| /home/ivy/Desktop/CTests//funargs.c|16|warning: (near initialization for ‘fun[1]’) [enabled by default]| ||=== Build finished: 1 errors, 4 warnings ===| </code></pre> <p>I used a Code::Blocks to compile it.</p> <p>Its simple, when I dont have any arguments but with some, I got confused:</p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef void (*VFUNCV)(void); void fun1() { printf("fun1\n"); } void fun2() { printf("fun2\n"); } void call(int which, VFUNCV* fun) { fun[which](); } int main() { VFUNCV fun[2] = {fun1, fun2}; call(1, fun); return 0; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload