对于函数指针“fptr”,为什么“fptr”和* fptr的值相同?* fptr甚至意味着什么?我只知道(* fptr)()或fptr()

时间:2013-05-16 06:27:29

标签: c function-pointers

为什么function pointer表现得像array pointer这种行为?我的意思是,让我们从数组list[]的情况开始,我们会考虑{{1} }和&list

list

我们也可以将数组元素称为 char name[5]= "Eric",(*aptr)[5]=&name; printf("%p,%p",*aptr,name); //BOTH ARE NUMERICALLY SAME (*aptr)[1]等。我明白这里发生了什么。

但为什么同样适用于函数呢?毕竟“函数”本身并不是与数组类似元素的连续内存块。考虑到这一点。

假设(*aptr)[2]是我的程序中的函数指针。为什么fptrfptr在打印时给出相同的值?*fptr甚至意味着什么?我只是我知道我们可以使用其指针*fptr(*fptr)()来调用函数,但那么fptr()是什么呢?

*fptr

结果 - #include<stdio.h> void foo(){}; int main(void) { void (*fptr)()=foo; printf("%p,%p",fptr,*fptr); }

1 个答案:

答案 0 :(得分:2)

指针指向内存位置。函数在内存中并具有起始地址。您可以很好地取消引用函数名称(这是一个指针)来获取该地址的函数。

来自,Stephen Prata“ Cpp Primer Plus


  

历史与逻辑神圣的语法!


  

pf和(* pf)如何相等?   一个学校的想法认为,因为pf是指向a的指针   功能,* pf是一个功能;因此,你应该使用(* pf)()作为   功能调用。 第二学校坚持认为,因为一个名字   function是指向该函数的指针,指向该函数的指针   应该像一个函数的名称;因此你应该使用pf()作为   功能调用。 C ++采用两种形式的折衷观点   正确,或至少可以允许,即使它们是逻辑上的   彼此不一致。在你判断妥协之前   严厉地说,反映了持有逻辑上的观点的能力   自我一致是人类心理过程的标志。