正文
c语言回调函数面试题 c回调函数简单例子
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言中的回调函数实在搞不懂
typedef
struct
{
int
a;
void
(*pshow)(int);
}TMP;
void
func(TMP
*tmp)
{
if(tmp-a
10)//如果a10,则执行回调函数。
{
(tmp-pshow)(tmp-a);
}
}
void
show(int
a)
{
printf("a的值是%d\n",a);
}
void
main()
{
TMP
test;
test.a
=
1;
test.pshow
=
show;
func(test);
}
这只是举例,一般回调函数的用法为:
甲方进行结构体的定义(成员中包括回调函数的指针)
乙方定义结构体变量,并向甲方注册,
甲方收集N个乙方的注册形成结构体链表,在某个特定时刻遍历链表,进行回调。
面试题:C语言用十种方法实现hello world程序,怎么做?
1 最经典c语言回调函数面试题的“Hello world!”,直接用 printf 输出 “Hello world!”
#include stdio.h
#include iostream
int main(){
printf("Hello world! "); // 教科书c语言回调函数面试题的写法
puts("Hello world!"); // c语言回调函数面试题我最喜欢c语言回调函数面试题的
puts("Hello" " " "world!"); // 拼接字符串
std::cout "Hello world!" std::endl; // C++风格的教科书写法
return 0;}
2、用宏写的“Hello world!”
“#”可以“提取”参数的名 字,把它变成字符串。
#include stdio.h
#define Say(sth) puts (#sth)
int main(){
return Say(Hello world!);
}
3. 断章取义的“Hello world!”
#include stdio.h
int main(){
return puts ("Do not say: Hello world! "[12]);
}
4. 退出时运行的“Hello world!”
atexit()注册回调函数。这个函数可以调用多次,最后注册的函数最先执行。
#include stdio.h
#include stdlib.h
void say(){printf("world! ");}
void sth(){printf("Hello ");}
int main(){
return atexit(say), atexit (sth);
}
5. 读取自己的“Hello world!”
// Hello world!
#include iostream
#include fstream
#include string
int main(){
std::ifstream ifs(__FILE__);
std::string say, some, word;
ifs say some word;
std::cout some " " word;
return 0;
}
6. 话分两头的“Hello world!”
声明一个全局的类的实例,在 main 函数执行之前会调用这个类的构造函数,结束之后则会调用析构函数。
#include iostream
class say{
public:say(){std::cout "Hell";}
~say(){std::cout "world!";}
}hello;
int main(){
std::cout "o ";
return 0;
}
7. 传入模板的“Hello world!”
#include iostream
template char * words
class say{
public:
void operator () (){std::cout words;}
};
char hello[] = "Hello world!";
int main(){
return sayhello()(), 0;
}
8. 调用私有函数的“Hello world!”
#include iostream
#include cstddef
class secret{
private:
virtual void say(){std::cout "Hello world!";}
};
int main(){
secret word;
(reinterpret_castvoid (*)()(**(intptr_t**)(word)))();
return 0;
}
9. 直接修改函数的返回地址
#include stdio.h
#include stdlib.h
#include stddef.h
void say(){
puts("Hello world!");
exit(0);
}
int main()
{
volatile intptr_t a = 0;
volatile intptr_t * p = a;
*(p + 2) = (intptr_t)say;
*(p + 3) = (intptr_t)say;
return 0;
}
10. 外星人说的“Hello world!”
#include stdio.h
void alien_say (char * p){
while (putchar (*(p += *(p + 1) - *p)));
}
int main(){
return alien_say ("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0;
}
问个C语言回调函数的问题
因为c语言回调函数面试题你pp参数列表要求 void()型c语言回调函数面试题的指针啊c语言回调函数面试题,所以要传相同类型的指针
关于c语言回调函数面试题和c回调函数简单例子的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。