linux c函数指针的应用

头文件:1.h

#include<stdio.h>

int nul_func();
int test1(int a,int b);
int test2(int a,int b,int c);
int test3(int a,int b,int c,int d);
int GetFunc(char *p,int (**pfunc)());

struct test
{
    char *pName;
    int  (*pFunc)();
}fun[] = { 

    {"test1",test1},
    {"test2",test2},
    {"test3",test3},
    {"nul_func",nul_func}

};

函数实现:15.c

#include "1.h"
#include <string.h>

int GetFunc(char *p,int (**pfunc)())
{
    int i=0;

    while( memcmp(fun[i].pName,"nul_func",8) != 0)
    {
        if( memcmp(p,fun[i].pName,strlen(fun[i].pName)) == 0 )
        {
            *pfunc = fun[i].pFunc;
            return 0;
        }
        i++;
    }   

    printf("%s\n","No Such Func.");
    return 0;
}

int test1(int a, int b)
{
    printf("a = %d, b = %d\n",a,b);
    return 0;
}

int test2(int a, int b, int c)
{
    printf("a = %d, b = %d , c = %d\n",a,b,c);
    return 0;
}

int test3(int a, int b,int c,int d)
{
    printf("a = %d, b = %d, c = %d, d = %d\n",a,b,c,d);
    return 0;
}

int nul_func()
{
    printf("%s\n","No Such Func");
    return 0;
}

主函数:14.c

#include<stdio.h>

int main()
{
    int i;
    int (*pFunc)();
    char caName[10] = ""; 

    memcpy(caName,"test1",5);
    i = GetFunc(caName,&pFunc);
    printf("%s\n",caName);
    i = (*pFunc)(1,2);

    memcpy(caName,"test2",5);
    i = GetFunc(caName,&pFunc);
    printf("%s\n",caName);
    i = (*pFunc)(3,4,5);

    memcpy(caName,"test3",5);
    i = GetFunc(caName,&pFunc);
    printf("%s\n",caName);
    i = (*pFunc)(6,7,8,9);

    return 0;
}

编译:gcc 14.c 15.c -o test

结果:./test

时间: 2024-10-24 23:46:22

linux c函数指针的应用的相关文章

C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论

今天做一个成绩管理系统的并发引擎,用Qt做的,仿照QtConcurrent搞了个模板基类.这里为了隐藏细节,隔离变化,把并发的东西全部包含在模板基类中.子类只需注册需要并发执行的入口函数即可在单独线程中执行.最终目标是,继承的业务逻辑类外部调用时有两个接口可选,调用syncRun同步执行:调用由引擎自动生成的asyncRun就异步执行.最终自动生成asyncRun的模板基类没能实现,主要原因是mingw对this处理的太有问题了!!原本以为编译器问题,后来才知道成员函数指针和this指针如此特殊

深入浅出剖析C语言函数指针与回调函数(二)

上一篇博文的地址: http://blog.csdn.net/morixinguan/article/details/65494239 这节,我们来看看函数指针与回调函数在Linux内核中的应用. 从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明. 我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子: File_operations文件操

C++ 指向成员函数指针问题

成员函数指针与常规指针不同,一个指向成员变量的指针并不指向一个内存位置.通常最清晰的做法是将指向数据成员的指针看作为一个偏移量. class ru_m { public: typedef int (ru_m::*p)(); p get_m(); int show(); }; int ru_m::show(){ return 10000; } ru_m::p ru_m::get_m(){ ru_m::p vc; //错误,当为对象时,对象指向的地址为相对地址,非内存地址 //所以,ru_m->sh

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

函数指针和回调函数

函数指针 函数指针是指向函数调用地址的指针.它和函数名究竟有什么关系呢?且看下文. 且看一小程序 首先,先请看下边程序: 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 void func(string s) 6 { 7 cout << s << endl; 8 } 9 10 void (*pFunc)(string s); // 不能够写成 void *pFunc(s

C语言中函数指针数组浅析

发现问题 问题分析 示例代码 发现问题 今天,在阅读Linux内核中关于socket的源代码时,遇到了下面一段代码: struct proto_ops { int family; struct module *owner; int (*release) (struct socket *sock); int (*bind) (struct socket *sock, struct sockaddr *myaddr, int sockaddr_len); int (*connect) (struct

大话 函数指针 和 枚举这对鸳鸯

一:起因 (1)函数指针是指向函数的指针变量,即本质是一个指针变量,是一个指向函数(可能是代码区)的首地址的指针,正如我们都知道,数组名就是指向数组第一个元素的常量指针,对于一个函数而言,函数名也是指向函数第一条指令的常量指针.大话 回调函数 和 枚举 (2)而回调函数就是C语言里面对函数指针的高级应用,回调函数是一个通过函数指针调用的函数.如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数. 大话 函数指针 和 指针函数 (

linux系统调用函数

Linux应用编程学习笔记                                 周学伟 一.系统调用文件编程   1.文件打开函数 /***************************************************************************** 函数名:open 函数原型:int open(const char * pathname, int flags) int open(const char * pathname,int  flags,

C基础--函数指针的使用

之前在看代码的时候,看了函数指针的使用,大体分为如下几类: 做一个function list,通过指针索引调用,使得处理功能类似的函数看起来更加清晰: 函数指针作为另一个函数的参数,用作回调: linux中经常使用来达到相同接口,实现不同,如: 1 struct platform_driver { 2 int (*probe)(struct platform_device *); 3 int (*remove)(struct platform_device *); 4 void (*shutdo