无法理解指针语句

时间:2017-06-10 17:21:08

标签: c pointers puts

我正在解决ctf问题,而且我无法理解。

DFHFUNCTION

任何人都可以解释一下这是什么意思吗?

3 个答案:

答案 0 :(得分:5)

fp是一个指针

(*fp)

到函数

(*fp)(

接受char

类型的1个参数
(*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的指针。如果您打印fpputs的值,则它们将具有相同的值,即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;