大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这是一个回调函数类型定义,函数的回值是int 类型,并且有一个int 类型的参数。
创新互联公司专注于企业全网营销推广、网站重做改版、钟山网站定制设计、自适应品牌网站建设、H5页面制作、商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为钟山等各大城市提供网站开发制作服务。
typedef int (CALLBACK *SHUTDOWNDLG) (int)
说明是类型定义 返回值 回调 指针 参数
在C语言里,函数名实际上是一个指向函数起始地址的指针。
这样定义后就可以用以下的方式定义函数:
SHUTDOWNDLG ShutdownDlg;
接着就可以把一个类型相同的函数的地址赋给 ShutdownDlg,比如用API函数 GetProcAddress 返回的函数地址,然后我们就可以调用函数了,比如:
Shutdown(4);
为什么要这样做呢,原因是,有时我们需要调用一个DLL中的函数,但事先没有这个函数的定义,虽然我们知道这个函数的函数名和参数类型,但编译器不知道啊,如果我们直接调用的话,将无法编译。所以要先定义,再用LoadLibrary加载DLL,然后用 GetProcAddress 找到这个函数的地址,最后才能调用函数。
要知道main函数也是由其他的程序调用的。
我们编写的程序,最终是不存在所谓的函数名的,有的只有内存单元地址0xffeedd00.
我们的程序执行时,程序加载到内存,比方说整个程序所占用的内存范围是0xffee0000 ~ 0xffeedd00,这么多。
假设程序有一个小函数fun(),那么它的范围可能是0xffee0000~0xffee00ff。
那么函数fun()的入口地址是多少? 0xffee0000。。
那么函数名fun实际上就是0xffee0000的别称。
你用一个指针指向这个函数,那么你把 指针 = 函数名,实际就是把0xffee0000这个内存单元的地址给指针p。
所以,结论是:
函数名 是 程序在执行时, 函数所占内存单元块的 首地址 的别称。
你调用一个函数 你得指定哪一个是吧 就是 你一个班的学生 你找哪一个就叫他的名字是吧
例
void set()
{
}
这个set就是函数名
常量,常量就是常数,就多了个字符常量,需要注意常量不能在等号的左边哦,变量就是你定义的量,一般在等号的左边,函数名就相当于你在的学校名,学校里有很多班,班就相当于变量,
是的。函数指针就是函数的指针,它是一个指针,指向一个函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
例:
A) char * (*fun1)(char * p1,char * p2);
B) char * *fun2(char * p1,char * p2);
表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。
C) char * fun3(char * p1,char * p2);
fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型。
扩展资料
函数指针使用的例子
#include stdio.h
#include string.h
char * fun(char * p1,char * p2)
{
int i = 0;
i = strcmp(p1,p2);
if (0 == i)
{
return p1;
}
else
{
return p2;
}
}
int main()
{
char * (*pf)(char * p1,char * p2);
pf = fun;
(*pf) ("aa","bb");
return 0;
}
函数名
就是函数的名字,只要符合命名规范的名字都可以作为函数名
例如
int
fun()
{
}
那么这个函数的名字就是
fun
int
fun2()
{
}
那么这个函数的名字就是
fun2