如何使用变量p声明一个新的指针函数使用以下

时间:2013-04-12 19:48:07

标签: c

我有p喜欢:

typedef int (*p)();

假设我要声明指针的函数是int foo()。 我想使用变量p声明一个新的指向函数foo的指针,以使用类似于:

的typedef语句
typedef int emp[10]; 
emp p;// so now p is an array of size 10 of type int 

4 个答案:

答案 0 :(得分:1)

int foo()
{
   // do something
}

typedef int (*p)();

int main( int argc, char** argv )
{
    int result;

    p funcPtr = foo;    
    result = funcPtr();

    return 0;
}

答案 1 :(得分:1)

  1. p是:

    typedef int (*p) ();
    
  2. foo()是:

    int foo(){
    }
    
  3. p类型变量为f

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

    (*f)();
    
  5. 示例代码:

    #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;
    }
    

    你可以发现它正在运作on codepad.

    注意你可以简单地分配p f = foo;,并像f()一样调用你可以在codepad找到的第二种形式

    编辑:正如@Akash所评论的那样:

    它编译并运行如下:

    ~$ gcc x.c -Wall 
    ~$ ./a.out 
     In FOO
     i = 4
    

    Here is a project帮助解释函数指针的用处。

答案 2 :(得分:0)

使用typedef:

typdef int (*FunctionPtr)();

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

FunctionPtr fptr = foo; // or &foo

没有typedef:

int (*fptr)() = foo; // or &foo

答案 3 :(得分:0)

从这篇文章:convert C function array to c++ functions pointer array?

 #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;
}