0

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

指出给定代码中的错误。

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

我的第一个问题是,下面的代码片段意味着什么?

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

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

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

4

3 回答 3

5

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

您的代码存在问题:

  1. fun并且main应该有一个返回类型。您的编译器可能不会要求它并假设它们返回ints,但您仍然应该给它们一个。

  2. 你需要在fun上面声明main,或者使用原型

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

附带说明一下,由于函数指针语法相对难看,因此很常见的是 typedef,例如

typedef int(*IntFunc)();

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

IntFunc p = fun;
p();
于 2013-07-16T14:10:11.373 回答
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

于 2013-07-16T14:16:24.787 回答
1

fun 是函数本身的名称。

int (*p)()

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

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

(*p)();

这就是函数指针p的函数的执行,即p赋值给函数fun,函数fun是通过调用指针p的内容来执行的,即(*p)();

于 2013-07-16T14:08:33.530 回答