问:若C语言形式参数为函数的函数怎么写?有例子的采纳后会加分.

问题描述:

问:若C语言形式参数为函数的函数怎么写?有例子的采纳后会加分.
1个回答 分类:综合 2014-10-25

问题解答:

我来补答
我以前答过的一个题的例子拿给你看看.
函数名:errorSetHandler
参数:function是个函数类型的变量,void (*)(int,char_t *),这个函数类型有两个参数,一个整型,一个char_t *的指针型,返回是个void *指针.
返回:是个函数类型,void (*)(int ,char_t *),类型说明跟上面一样.
void (*errorSetHandler(void (*function)(int etype,char_t *msg)))(int etype,char_t *msg)
{
void (*oldHandler)(int etype,char_t *buf); //定义一个函数void (*)(int ,char_t *)类型的函数变量oldHandler
oldHandler = errorHandler; //把errorHandler赋给oldHandler,errorHandler应该也是个函数变量
errorHandler = function; //把参数function赋给errorHandler
return oldHandler; //返回函数变量oldHandler的值
}
补充一下:
通过typedef可以简化这个函数的形式:
typedef void (*ErrHdlr)(int,char_t *);
然后这个函数可以简化成:
ErrHdlr errorSetHandler(ErrHdlr function)
{
ErrHdlr oldHandler;
oldHandler = errorHandler;
errorHandler = function;
return oldHandler;
}
这样是不是就很直观了
再问: 、、、还是没看懂 就是说,我写了A,B两个函数 我再要用函数A的时候,把B做参数:A(···B···)这种类型 请问怎么写~因为看书的时候,有个遍历函数类似这样的 比如Traverse(s,void (*visit)()) 若B(就是visit函数)还有参数和没有参数又怎么写,举一个很简单的例子就好 谢谢了~
再答: 如果B作为A的参数,假如B是这么定义的: void B(int x) { } 那么A就这么定义(这里假定A返回值是int型,并且除了函数这个参数,还有两个参数,一个int一个char): int A(int a, char b, void (*fun)(int)) { } 调用A的时候这么写: n=A(x,y,B); 就用你这个遍历函数为例 B函数一个char型参数,函数实现打印这个字符 void B(char c) { printf("%c", c); } 遍历函数遍历整个字符串,用visit处理每个字符 void Traverse(char *s, void (*visit)(char)) { while(*s++) visit(*s); } 在main里调用Traverse函数: int main() { char str[]="hello world!"; Traverse(str, B); }
 
 
展开全文阅读
剩余:2000