高安建站公司,互联网电商,wordpress网站文件目录,制作书签的感受心得一、函数指针
1.1、概念
函数指针#xff1a;首先它是一个指针#xff0c;一个指向函数的指针#xff0c;在内存空间中存放的是函数的地址#xff1b;
示例#xff1a;
int Add(int x#xff0c;int y)
{return xy;}
int main()
{printf(%p\n,Add);…一、函数指针
1.1、概念
函数指针首先它是一个指针一个指向函数的指针在内存空间中存放的是函数的地址
示例
int Add(int xint y)
{return xy;}
int main()
{printf(%p\n,Add);//打印一下函数Add()的地址printf(%p\n,Add);//数组名等于数组首元素地址那函数名是等于函数地址吗return 0;
}函数名是等于函数地址的
1.2、函数指针的使用方法
函数指针的定义 函数的返回值类型*指针名函数的参数列表类型
int Add(int x, int y)
{return xy;
}int main()
{int (*pf)(int, int) Add;//函数指针定义返回值类型和参数类型与函数Add相同
}1.3、怎么使用函数指针去调用函数呢
void Add(int x, int y){return xy;}int main(){int (*pf)(int,int)Add;int ret(*pf)(3,5);
}解析 int ret(*pf)(3,5)此时就相当于通过函数名调用 int retAdd(3,5);}我们又知道函数名是等于函数名的所以int (*pf)(int,int)Add可改成int (*pf)(int,int)Add;此时Add等价于pf所以int ret(*pf)(3,5);语句可改成int retpf(3,5);等价于int retAdd(3,5)故我们知道了对于int ret(*pf)(3,5);语句来说*是没有意义的有一个或多个或者没有都不影响
二、阅读两段有趣的代码
注来源于《c陷阱和缺陷》
1.( *(void( *)( ))0 )( ) 解析 这段代码的含义是
1调用0地址处的函数 2该函数无参数返回值是void 3拆分 · ·●void()() 表示函数指针类型 ··●( void()() )0 表示对0进行强制类型转换把0强制类型转换成一个函数的地址如int3.14 ·· ●* ( void()() )0 表示对0地址处的函数进行了解引用操作 ··● ( void(*)() )0)() 则表示调用0地址处的函数4请看图解 2.void (* signal(int,void( * )( int ) ) )(int) 解析
1signal和先结合说明signal是一个函数名 2signal函数第一个参数的类型为int第二个参数的类型为函数指针该函数指针指向一个参数为int返回值为void的函数 3signal 函数的返回类型也是一个函数指针该函数指针指向一个参数为int返回值为void函数 4请看图解
综上signal是一个函数声明