c - 为什么我们不能动态分配一个指向函数的指针?

标签 c arrays function pointers malloc

我试图动态地分配一个指向这样的函数的指针

void (*f)(void*);
f = (*f)malloc(sizeof(f) * 2);

我得到了一个错误。

error: expected ';' before 'malloc'

我搜索后发现,我们不能动态分配一个函数指针,只能像数组一样声明。第一步,我将它声明为一个函数数组

void (f[2])(void*);

我看到我遇到了另一个错误,我不能声明一个函数数组,我必须将它声明为一个函数指针数组。

void (*f[2])(void*);

在我的搜索中我也发现,指向函数的指针不指向数据,它指向代码。 如果有人能向我解释为什么我们不能动态分配一个指向函数的指针,以及为什么我们不能有一个函数数组而不是函数指针数组。

我的代码如下:

#include <stdio.h>
#include <stdlib.h>

void printNr(void *nr)
{
    printf("%i\n", nr);
}

void printChar(void *ch)
{
    printf("%c\n", ch);
}

int  main(void)
{
    void (*f)(void*);
    f = (*f)malloc(sizeof(f) * 2);
    f = printNr;
    (f  + 1) = printChar;
    (*f)(15);
    (*(f  + 1))('t');
    return (0);
} 

最佳答案

如果要为指向 int 的指针数组动态分配空间,则需要 double **(指向指针的指针)

int **arr = malloc(sizeof(*arr) * n);

对于指向函数的指针数组也是如此,您需要一个双 ** 然后取消引用以获取 sizeof:

#include <stdio.h>
#include <stdlib.h>

void fn1(void *val)
{
    puts((char *)val);
}

void fn2(void *val)
{
    puts((char *)val);
}

int main(void)
{
    void (**f)(void*);

    f = malloc(sizeof(*f) * 2);
    f[0] = fn1;
    f[1] = fn2;
    f[0]("Hello");
    f[1]("Bye");
    free(f);
    return 0;
}

关于c - 为什么我们不能动态分配一个指向函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45683696/

相关文章:

c - 为什么 fopen ("any_path_name",'r' ) 不返回 NULL?

php - 如何将 javascript 中的数组传递给 php - LARAVEL?

arrays - 如何将变量的值(字符串)设置为等于数组中的键?

c - 从#define 函数返回一个字符串

c++ - C/C++中的所有函数都在哪里定义的?

C 发送/返回带有函数的数组

function - 对于良好的日常习惯来说,哪一个特征最重要?

javascript - 用于多绘图的 jQuery 就绪函数

C 在 for 循环上的基本交互

php - 如何在 Symfony 1.4 的成功页面中获取数据数组