加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

学术论文中遇到奇怪的C构造

发布时间:2020-12-16 10:17:18 所属栏目:百科 来源:网络整理
导读:代码说明: void (* log_msg)(char *msg) =printf;void change_and_log(int *buffer,int offset,int value){ buffer[offset] = value; log_msg("changed");} 我最关心的是第一部分: 首先,签名void(* log_msg)(char * msg)是什么意思?这段代码只是将函数log
代码说明:

void (* log_msg)(char *msg)
    =printf;

void change_and_log(int *buffer,int offset,int value){
    buffer[offset] = value;
    log_msg("changed");
}

我最关心的是第一部分:

首先,签名void(* log_msg)(char * msg)是什么意思?这段代码只是将函数log_msg映射到printf吗?在这种情况下,为什么函数名称(* log_msg)而不仅仅是log_msg?

解决方法

这是一个 function pointer.

函数指针的类型是R(*)(Args …),其中R和Args …被返回类型和参数替换,如果有的话.它被读作“指向带参数Args …并返回R的函数的指针”.

您的代码将更容易阅读:

// print_function is a type that is a function pointer
typedef void (*print_function)(char *msg); 

// log_msg is a variable of the type print_function: it points to a function
print_function log_msg = printf; // point to printf

后来,它只是通过函数指针调用该函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读