C 如何使用变量p声明指向函数的新指针

C 如何使用变量p声明指向函数的新指针,c,C,我有p像: typedef int (*p)(); 假设我要声明指针的函数是intfoo()。 我想声明一个指向函数foo的新指针,使用变量p使用typedef语句,如: typedef int emp[10]; emp p;// so now p is an array of size 10 of type int 使用typedef: typdef int (*FunctionPtr)(); int foo() { return 4; // chosen by fair d

我有
p
像:

typedef int (*p)();
假设我要声明指针的函数是
intfoo()

我想声明一个指向函数foo的新指针,使用变量p使用typedef语句,如:

typedef int emp[10]; 
emp p;// so now p is an array of size 10 of type int 
使用typedef:

typdef int (*FunctionPtr)();

int foo()
{
    return 4; // chosen by fair dice roll, should be random
}

FunctionPtr fptr = foo; // or &foo
int (*fptr)() = foo; // or &foo
没有typedef:

typdef int (*FunctionPtr)();

int foo()
{
    return 4; // chosen by fair dice roll, should be random
}

FunctionPtr fptr = foo; // or &foo
int (*fptr)() = foo; // or &foo
  • p
    是:

    typedef int (*p) ();
    
  • foo()是:

  • p
    类型变量为
    f

    p  f = &foo; 
    
  • 如何使用指针调用:

    (*f)();
    
  • 示例代码:

    #include<stdio.h>
    int foo(){
     printf("\n In FOO\n");
     return 4;
    }
    typedef int(*p)();
    
    int main(){
     p f = &foo;
     int i = (*f)();
     printf("\n i = %d\n", i);
     return 1;
    }
    
    帮助解释函数指针的有用性。

    本文:

    #包括
    void f1(){printf(“helo\n”);}
    void f2(){printf(“world\n”);}
    类型定义结构函数
    {
    无效(*f)();
    }func;
    int main()
    {
    func a[]={{f1},{f2};
    a[0].f();
    返回0;
    }
    
    您的问题是什么?我想声明一个指向函数foo的新指针,使用变量p使用typedef语句。类似于typedef int emp[10];emp;//现在p是一个大小为10的数组,类型为int,那么(
    typedefint(*p)(;
    )就可以了。名称
    p
    将别名此类型。
    p
    是指针类型的标识符。只需使对象属于该类型并分配给它们:
    pmyptr1,q;myptr1=foo;q=quux;myptr1()/*调用foo()*/;q()/*调用qux()*/告诉我声明函数新指针的语法让我们使用'p'声明'q'我想使用变量p声明函数foo的新指针以使用typedef语句。类似于typedef int emp[10];emp;//现在p是一个大小为10的int-1型数组:在你的代码中,p是一个类型(sorta)。您不能分配给它。现在可以了。我撤销了-1。那绝对没问题。。。。但是我想声明一个新的指向函数的指针,而不是使用(*FunctionPtr)()来使用typedef的ur(*FunctionPtr)()statement@Aakash我完全不明白你的问题。我的方法中有什么“不够新”?试着用更好的英语重新表述你的要求,我不知道你在说什么。我想做以下事情,但它给出了错误typedefint(*p)();intfoo(){}intmain(){intc;pq;q=fun()c=(*q)();返回0;}@Aakash 1。把这个写在你的问题中,2。格式化它。那我就麻烦读了。看看高拉夫·乔汉的答案。我就是这么想的wanted@pmg是:),以及
    pf=foo很好用…只是为了强调我用这种方式写的指针。@Girijesh我已经试过了。。它给出了以下2个错误1必须使用内存分配2删除语法的地址error@Aakash你可能犯了一些错误,请检查我证明其有效的链接。@gaurav与本案有关的一个疑问。。。为什么在我的问题中删除typedef语句中的“int”不会产生任何错误error@Aakash名字是Grijesh,实际上我忘记了之前的错误,没有更正,虽然函数的默认返回类型假定为int,但编译时没有错误,第二件事是我用Pmg先生建议的另一种技术进行了更新,找到答案中的第二个代码板链接
    
    ~$ gcc x.c -Wall 
    ~$ ./a.out 
     In FOO
     i = 4
    
     #include <stdio.h>
    
    void f1() {printf("helo\n");}
    void f2() {printf("world\n");}
    
    typedef struct func
    {
        void (*f)();
    }func;
    
    int main()
    {
        func a[] = {{f1}, {f2}};
        a[0].f();
        return 0;
    }