在一本书中,我遇到了以下问题。 我面临的问题是,什么是函数指针?它是如何工作的以及它声明的语法是什么。
将错误指向给定代码。
main()
{
int (*p)()=fun;
(*p)();
}
fun()
{
printf("Hi..");
}
我的第一个问题是,以下代码snipet表示什么?
int (*p)()=fun;
(*p)();
第二个明显的问题是给定代码中的错误是什么.. ??
请参阅ionela.voinescu的解决方案的答案..它与解决方案手册中的内容相同.thnx
答案 0 :(得分:5)
int (*p)() = fun
声明一个指向返回int
的函数的指针,然后将函数fun
的地址赋给该指针。 (*p)()
调用p
指向的任何函数。
代码问题:
fun
和main
应该有返回类型。您的编译器可能不会要求它并假设它们返回int
,但您应该给它们一个。
您需要在fun
之上声明main
,或使用prototype
此外,(*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)();