C中的功能指针错误

时间:2013-07-16 14:05:25

标签: c function pointers

在一本书中,我遇到了以下问题。 我面临的问题是,什么是函数指针?它是如何工作的以及它声明的语法是什么。

将错误指向给定代码。

main()
{
    int (*p)()=fun;
    (*p)();
}
fun()
{
    printf("Hi..");
}

我的第一个问题是,以下代码snipet表示什么?

int (*p)()=fun;
(*p)();

第二个明显的问题是给定代码中的错误是什么.. ??

请参阅ionela.voinescu的解决方案的答案..它与解决方案手册中的内容相同.thnx

3 个答案:

答案 0 :(得分:5)

int (*p)() = fun声明一个指向返回int的函数的指针,然后将函数fun的地址赋给该指针。 (*p)()调用p指向的任何函数。

代码问题:

  1. funmain应该有返回类型。您的编译器可能不会要求它并假设它们返回int,但您应该给它们一个。

  2. 您需要在fun之上声明main,或使用prototype

  3. 此外,(*p)()是不必要的;你可以使用p()

    作为旁注,因为函数指针语法比较丑陋,所以看到typedef很常见,例如

    typedef int(*IntFunc)();
    

    允许您像这样声明和使用p

    IntFunc p = fun;
    p();
    

答案 1 :(得分:4)

正确的代码如下:

#include <stdio.h>

int fun();
int main(){
  int (*p)()=fun;
  (*p)();
  return 0;
}

int fun(){
  printf("Hi..");
  return 0; 
}

1。
int fun(); 您必须在main中使用之前声明您的函数;否则main不会识别它。
2.
int (*p)():声明变量p,它是指向返回int且没有参数的函数的指针(或未定义的参数个数,具体取决于标准)。
3.

int fun();
.........
int (*p)()=fun;

要使其正常工作,fun还必须返回int。在为变量赋值时的含义,它必须具有与变量声明相对应的类型。将值赋给指向返回int且没有参数的函数的指针时,分配给它的函数也必须返回int且没有参数(或未定义的参数个数,具体取决于标准) 。
4.
(*p)();
您调用现在指向p的函数fun

答案 2 :(得分:1)

fun是函数本身的名称。

int (*p)()

是函数指针的定义,如'int a'是整数的定义。

int *是指针本身,()表示它是指向函数的指针。

(*p)();

这是函数指针p的函数的执行,即p被分配给函数fun,它通过调用指针p的内容来执行,因此(* p)();