2014-01-15 49 views
5

我的下面的代码工作正常。但我有一点疑问,请参阅//Comment1//Comment2如何在函数指针中使用函数的地址?

#include<stdio.h> 
#include<string.h> 

struct PTR 
{ 
    int (*funptr)(int); 
}; 

int fun1(int) 
{ 
    printf("Fun1\n"); 
    return 0; 
} 

int fun2(int) 
{ 
    printf("Fun2\n"); 
    return 0; 
} 

int main() 
{ 
    PTR p; 
    p.funptr = &fun1; //Comment1 
    p.funptr(5); 

    printf("\n"); 

    p.funptr = fun2; //Comment2 
    p.funptr(5); 


    return 0; 

} 

输出:FUN1 FUN2

这是没有问题的输出。

在评论1'&'使用opertor,所以我们正在expillicing告诉得到地址,在comment2中,我们没有使用'&',所以哪一个是正确的方式?

+1

你怎么能在声明主要功能PTR p,而无需使用结构名称或的typedef? –

+0

@RaghuSrikanthReddy PTR是结构的名称。 (struct PTR) –

+0

但是,这段代码编译了吗?在PTR之前,您既没有使用过结构体也没有使用结构体 –

回答

1

“&”服用功能的地址时是可选的。

1

这里,

p.funptr = &fun1我们给函数的地址。因此'&'这里是可选的,因为p.funptr = fun1也分配了地址功能。