我正在解决ctf问题,而且我无法理解。
DFHFUNCTION
任何人都可以解释一下这是什么意思吗?
答案 0 :(得分:5)
fp
是一个指针
(*fp)
到函数
(*fp)(
接受char
(*fp)(char)
并返回int
int (*fp)(char)
在多数冗余转换后,指针初始化为puts
的地址。
int (*fp)(char *)=(int(*)(char *))&puts
int (*fp)(char *)=(int(*)(char *))puts // & redundant
int (*fp)(const char *)=puts
对象i
未初始化。它的类型为int
int (*fp)(char *)=(int(*)(char *))&puts, i;
答案 1 :(得分:1)
首先是变量声明:
int (*fp)(char *)
fp
是指向函数的指针,该指针采用char *
参数并返回int
。
然后将fp
初始化为值:
(int(*)(char *))&puts
该值是puts
函数的地址,转换为与fp
相同的类型。
最后,还有另一个变量声明:
int /* ... */, i;
答案 2 :(得分:0)
此声明分为两部分:
int (*fp)(char *)=(int(*)(char *))&puts, i;
首先是:int (*fp)(char *)=(int(*)(char *))&puts;
说明:这是函数指针声明和单个语句中的初始化。其中fp
是指向函数puts
的指针。如果您打印fp
和puts
的值,则它们将具有相同的值,即puts
的地址。
#include<stdio.h>
int main()
{
int (*fp)(char *)=(int(*)(char *))&puts, i;
printf("puts %p\n",puts);
printf("fp %p\n",fp);
}
和第二是:int i;