k...@aspodata.se writes:

[...]

> To exemplify the "as they are used" statement, take a function pointer 
> declaration:
>
>  void (*log_func)(int priority, const char *format);
>
> here you cannot conveniently move the "*" to the "void" so it will look 
> like a "pointer" declaration; it declares log_func to be something which
> if used as (*log_func)(a, b, d) will "give" you a void value.

Unless something more interesting is being done, function pointers don't
need to be dereferenced, they can be used just like functions. And
vice-versa. Eg, this useless little program converts all its arguments
to ints and prints a message stating if they were odd or even twice:

-------
#include <stdlib.h>
#include <stdio.h>

static void even(int d) 
{
    printf("%d is even\n", d);
}

static void odd(int d) 
{
    printf("%d is odd\n", d);
}

static void (*f[])(int) = {
    even,
    odd
};

int main(int argc, char **argv)
{
    int i;

    while (*++argv) {
        i = atoi(*argv);
    
        /* function name used as expression turns into function pointer */
        (i & 1 ? odd : even)(i);

        /* function pointer can be used like function */
        f[i & 1](i);
    }

    return 0;
}
------
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to