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 pointertypedef voID (*print_function)(char *msg); // log_msg is a variable of the type print_function: it points to a functionprint_function log_msg = printf; // point to printf
后来,它只是通过函数指针调用该函数.
总结以上是内存溢出为你收集整理的学术论文中遇到奇怪的C构造全部内容,希望文章能够帮你解决学术论文中遇到奇怪的C构造所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)