难以理解在void数组中使用void(* fptr)(void)指针

时间:2019-03-07 00:55:41

标签: c

我很难理解应该容易受到攻击的C程序的代码。

我们有这个定义gcd(),在上面我保留了部分代码。我对指令typedef void (*fptr)(void);的理解并没有什么问题,该指令仅定义了指向永远不会执行的函数的fptr指针,因为该指令仅定义并初始化了一个指针(对吗?)。

我的问题是理解指令fptr p = pat_on_back;。当明显使用fptr类型声明和初始化void数组时,此指令如何工作?不应该只接收一个void参数吗?

就此而言,get_wisdom()和put_wisdom()函数都接收并返回void。这个小程序将填充并打印一个简单的字符链接列表,称为“智慧”。函数get_wisdom()和put_wisdom()确实执行了看起来似乎正确的操作。

fptr  ptrs[3] = { NULL, get_wisdom, put_wisdom };

1 个答案:

答案 0 :(得分:1)

.nc

将fptr类型定义为指向返回a的函数的指针 指定类型(void)的值,并需要指定参数(void)

typedef void (*fptr)(void);

将ptrs定义为3个元素的向量,每个元素都是一个指针 以void为参数(任何)的函数,并返回void。

  • ptrs [0] = NULL ;第一个指针指向NULL。
  • ptrs [1] = get_wisdom ;第二个指针指向函数“ get_wisdom”。
  • ptrs [2] = put_wisdom ;的 第三个指针指向函数“ put_wisdom”。