> For the complete documentation index, see [llms.txt](https://applezu.netdpi.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://applezu.netdpi.net/linux-prog/function-pointer-in-c.md).

# Function pointer in C

Function pointer is useful to do abstraction; it is a general implementation of immediate interface; it is also used to implement the plug-in interface.

Here is a example:

```c
#include <stdio.h> 
#include <strings.h>

typedef struct _dev{ 
    char name[16]; 
    void (*open)(); 
} dev;

double init (dev *dev) 
{ 
    bzero(dev->name, sizeof(dev->name)); 
    return 0.0; 
}

int dev_a_open(void) 
{ 
    printf("device a open\n"); 
    return 0; 
}

int dev_b_open(void) 
{ 
    printf("device b open\n"); 
    return 0; 
}

int main(int argc, char *argv) {

    dev dev_a, dev_b, *dev;
    init(&dev_a);
    init(&dev_b);

    dev = &dev_a;
    dev->open = dev_a_open;
    dev->open();

    dev = &dev_b;
    dev->open = dev_b_open;
    dev->open();

    return 0;
}
```
