为什么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]
是我的程序中的函数指针。为什么fptr
和fptr
在打印时给出相同的值?*fptr
甚至意味着什么?我只是我知道我们可以使用其指针*fptr
或(*fptr)()
来调用函数,但那么fptr()
是什么呢?
*fptr
结果 - #include<stdio.h>
void foo(){};
int main(void)
{
void (*fptr)()=foo;
printf("%p,%p",fptr,*fptr);
}
答案 0 :(得分:2)
指针指向内存位置。函数在内存中并具有起始地址。您可以很好地取消引用函数名称(这是一个指针)来获取该地址的函数。
来自,Stephen Prata“ Cpp Primer Plus ”
历史与逻辑神圣的语法!
pf和(* pf)如何相等? 一个学校的想法认为,因为pf是指向a的指针 功能,* pf是一个功能;因此,你应该使用(* pf)()作为 功能调用。 第二学校坚持认为,因为一个名字 function是指向该函数的指针,指向该函数的指针 应该像一个函数的名称;因此你应该使用pf()作为 功能调用。 C ++采用两种形式的折衷观点 正确,或至少可以允许,即使它们是逻辑上的 彼此不一致。在你判断妥协之前 严厉地说,反映了持有逻辑上的观点的能力 自我一致是人类心理过程的标志。